サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16e
hachinobu.hateblo.jp
背景 addSubviewやremoveFromSuperviewしたタイミングでViewの処理をしたかったので色々調べてたら出てきたのでメモ。 方法 willMoveToSuperview:、didMoveToSuperviewメソッドを使用すれば良い。 willMoveToSuperview: 自身(UIView)が親Viewに追加される直前に呼ばれる。 引数のnewSuperviewには親Viewがはいってくる。 追加でなく削除される直前にもこのメソッドは呼ばれる。 削除の場合は引数のnewSuperviewがnilになる。 didMoveToSuperview 自身(UIView)が親Viewに追加された直後に呼ばれる。 追加でなく削除される直後にも呼ばれる。 サンプルコード 該当のメソッドを使った簡単なサンプルコード UIViewMoveEventSample WWDCで新言語
CleanArchitectureを使ったサンプルアプリを作成したので、説明していきたいと思います サンプルアプリ まず、作成したアプリについてです Qiitaのクライアントです 認証 投稿一覧 詳細 ユーザー投稿一覧 詳細 ソースコード https://github.com/hachinobu/CleanQiitaClient 使い方 一応そのままビルドしてもビルドは通りますが認証していない状態なのでAPIコール制限とストックボタンなどは動かないです 認証したい場合は下記からアプリケーションの登録をしてください https://qiita.com/settings/applications/new リダイレクト先のURLをサンプルソースコードでは固定にしてしまっているので clean-qiita-client://oauth で登録すると楽です Client IDとClient Secr
iOS7からスワイプすることで戻る機能が標準になりました。 いくつかのアプリではこの機能を無効にしたいと思うものもあると思います。 やり方は各ViewControllerで if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = NO; } これでOK。 私の場合はカスタムのUINavigationControllerを使って全てのクラスを管理していたので、カスタムのUINavigationControllerクラスにUINavigationControllerDelegateのnavigationController:
UIViewやUIButtonなどに枠線をつけたりする方法を忘れて毎回ぐぐっているのでメモ。 やり方 UIView *layerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; layerView.center = self.view.center; //枠線 layerView.layer.borderWidth = 2.0f; //枠線の色 layerView.layer.borderColor = [[UIColor redColor] CGColor]; //角丸 layerView.layer.cornerRadius = 10.0f; 必ず<QuartzCore/QuartzCore.h>をインポートすること。 以上。
背景 基本的な言語仕様はふんわりと学んだので、今後多用するであろうArrayとDictionaryの使い方を調べたのでメモ。 Array サンプルコード // immutableなString型の配列 let names: String[] = ["name5", "name2", "name1", "name3"] //各データを取得 let name1 = names[0] //name5 let name2 = names[1] //name2 let name3 = names[2] //name1 let name4 = names[3] //name3 //各件数 names.capacity // 4 names.startIndex // 0 names.endIndex // 4 names.count // 4 // mutableなString型の配列 var pro
背景 配列内の値の合計や最大値などを取得したい場合に何か良い方法はないかと調べた。 方法 NSExpression を使用することで集計関数の式を定義できる。 //最大値 NSArray *numArray = @[@3, @6, @12, @8]; NSExpression *maxExpression = [NSExpression expressionForFunction:@"max:" arguments:@[[NSExpression expressionForConstantValue:numArray]]]; id maxValue = [maxExpression expressionValueWithObject:nil context:nil]; NSLog(@"最大値:%f", [maxValue floatValue]); //最大値:12.000000 //最小
経緯 メソッドの遅延実行に今までperformSelector: withObject: afterDelay: を使用していたのだが呼び出すメソッドの引数が複数ある場合に困っていた。 呼び出すメソッドの引数を配列で受け取るようにとかすれば良いのだろうけど、そのためだけに仕様を変更したくない。 そんな時に発見したのがGCDのdispatch_after。 サンプル 下記のように引数を複数もつメソッドを遅延実行したい場合、performSelector: withObject: afterDelay:では呼び出すことができない。 - (void)nameInfoWithFirstName:(NSString *)firstName andLastName:(NSString *)lastName andNickName:(NSString *)nickname { NSLog(@"first
経緯 下記のように赤いViewのスグ隣に青いViewを配置したいとする。 今まではCGRectGet系メソッドを使って下記のようにやっていた。 //赤いViewの配置 UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(60.0f, 150.0f, 100.0f, 100.0f)]; redView.backgroundColor = [UIColor redColor]; [self.view addSubview:redView]; //青いViewの配置 UIView *blueView = [[UIView alloc] initWithFrame:(CGRect){ CGPointZero, CGSizeMake(100.0f, 100.0f) }]; blueView.backgroundColor = [UIC
CoreDataでデータを抽出する際にNSPredicateを使用して条件を絞るがNSPredicateのpredicateWithFormatメソッドに IN句を使う際に文字列として作成した変数を条件に入れると落ちてしまう。 //失敗例 NSInvalidArgumentException NSString *column = @"column1"; NSArray *datas = @[@"a", @"b", @"c"]; NSString *where = [NSString stringWithFormat:@"%@ IN %@", column, datas]; NSPredicate *predicate = [NSPredicate predicateWithFormat:where]; //成功例 NSString *column = @"column1"; NSArray
これまでxibファイルで[Top Bar]からNavigationBarを選択して、そのNavigationBarの下にViewを配置していたのだけれども、 iOS7でビルドするとNavigationBar領域に配置したViewが食い込んでしまっていた。 コードの場合は下記で対応。 - (void)viewDidLoad { [super viewDidLoad]; if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) self.edgesForExtendedLayout = UIRectEdgeNone; } もしくはStoryboardの該当のViewControllerを選択して[Extend Edges]の[Under Top Bars]のチェックを外す。 こうすることでiOS7でNavigationBa
CentOS6.4にGitサーバを構築したのでメモ [サーバ側] # yum install git git-deamon git-all xinetd # chkconfig xinetd on # /etc/init.d/xinetd start xinetd を起動中: [ OK ] 必要なものをインストールして起動設定が終わったらgit-daemonファイルを/etc/xinetd.dに作成 # touch /etc/xinetd.d/git-daemon # vi /etc/xinetd.d/git-daemon 内容は # default: off # description: The git dæmon allows git repositories to be exported using \ # the git:// protocol. service git
メインスレッドを止めないためにdispatch_asyncを使ってネットワーク処理をバックグラウンドで行っていた。 ネットワーク処理が完了次第メインスレッドでUIを変更するのが普通だが誤ってバックグラウンド側でUIをいじる処理を書いたら、 iPhone5 iOS6ではスクロールするたびにステータスバーがチカチカしておかしくなった。 当然だけどUIをいじったりする処理はメインスレッドでやろうって話。 //バックグラウンド処理 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ネットワークとかの重い処理を書く //ここにUIをいじる処理を書いた事によってステータスバーがチカチカしたりおかしくなった //メインスレッド dispatch_async(dispatch_get_mai
NSArrayからNSPredicateを使ってデータを抽出するにはNSArrayのfilteredArrayUsingPredicateメソッドを使う。 単純な例 NSArray array = @[@"a", @"b", @"c"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:"SELF = a"]; NSArray result = [array filteredArrayUsingPredicate:predicate]; NSLog(@"%@", result) //a あるクラスのインスタンスを条件にしてマッチするオブジェクトを抽出したい場合 //自作クラス @interface Person : NSObject @property (nonatomic, copy) NSString *name; @
今更感満載ですが、NSDictionaryとNSArrayのモダン記法です。 以前の書き方は //NSDictionary NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"hachinobu", @"name", [NSNumber numberWithInt:28], @"age", nil]; NSString *name = [dic valueForKey:@"name"]; NSString *age = [dic valueForKey:@"age"]; //NSArray NSArray *array = [NSArray arrayWithObjects:@"hachi", @"nobu", nil]; NSString *hachi = [array objectAtIndex:0]; 新し
[[UIScreen mainScreen] scale]で取得した値が2.0の場合はretinaディスプレイ搭載機種。 iPadかiPhoneかの判別を先にしてあげてから if([[UIScreen mainScreen] scale] == 2.0f) { //Retina } else { //Not Retina }でretinaかどうか判定するのがよろし
NSData型は本来であれば NSData* aData; aData = [aStr dataUsingEncoding: NSASCIIStringEncoding];上記でNSString型に変換できるが、deviceTokenには先頭に < 終端に > 文字列の間に空白が入っているので上記の変換方法でやってもnullが返ってきてしまう。 解決方法としては<> などの不要な文字を消してあげれば良い。 NSString *device_id = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@
UItableViewCellにUITextFieldをaddSubviewしてテキストフィールドを載せたセルを 1セクションに1セルの形式で9つ作成した。 動作確認したところ、スクロールすると他のセクションのセルが重なったりして滅茶苦茶になっていた。 原因としてはテーブルビューのセルを再利用する仕組みのせいだった。 今回の場合はaddSubしたテキストフィールドは解放したくなかったのでセルの数だけ再利用のidentifierを作成した。 NSArray *identifiers = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", nil]; NSString *CellIdentifier = [identifiers objectAtIndex:[indexPath sect
xcode4.3はデバッガが今までのGDBじゃなくLLDBがデフォルトで選択されている。 このままNsLogでコンソールに出力すると文字化けが発生。 なので、xcode左上のSchemeのプロジェクト名の箇所をクリックして[Edit Scheme]-[Run App名]を選択して [Info]タブのDebugger項目でGDBを選択してあげれば変更できる
このページを最初にブックマークしてみませんか?
『hachinobu.hateblo.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く