Objective-C
iOS アプリがサーバーと通信している間ローディング表示を出すために、 MBProgressHUD を導入することにした。 jdg/MBProgressHUD MBProgressHUD の基本的な使い方。 まずサブビューに追加し、 self.hud = [[MBProgressHUD alloc] initWithView:self.view]; …
ベーシック認証のユーザー名とパスワードは、AFHTTPRequestSerializer にセットすればいい。 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url]; manager.requestSerializer = [[AFHTTPRequestSeriali…
Xcode 5 になって、InterfaceBuilder や Storyboard で Auto Layout を設定しやすくなったけど、 コードで Auto Layout 設定したいときが稀にある。 例えば自分の場合、継承して使いまわすことを前提に View や ViewController のベースクラスを作るときとか…
AutoLayout で UIImageView の幅を 80 に固定 UIImageView の contentMode は UIViewContentModeScaleAspectFill このとき、縦よりも横の幅がかなり長い画像を表示すると、UIImageView の幅が変わってしまった。 調べたところ、縦横のアスペクト比が違う場合…
審査でリジェクトを受けて発覚したんだけど、 Storyboard で ViewController に ADBannerView を配置 Storyboard で ViewController を ADBannerView の delegate に設定 ViewController に ADBannerViewDelegate のメソッドを実装 ADBannerViewDelegate の…
mirek/YAML.framework CocoaPods でインストールできる LibYAML のラッパーで、Objective-C っぽい API を提供している。 YAML のパースはこんな感じ。 NSString *yamlText = @"- title: 第一章\n" " articles:\n" " - title: 第一話\n" " path: Story1\n" "…
Objective-C の日付操作では NSDate だけじゃなく NSDateComponents や NSCalendar が登場してきて、 その面倒くささはもはや苦行。 そもそも、簡単に年や月を取得できない NSDate の API がイケてない。 日付操作をもっと手軽にやりたい。 もう自分でライブ…
ADBannerView を画面下に配置するオレオレライブラリ TNAAdController を使うとき、 ファイルをプロジェクトに追加して使っていた。 これだとソースコードが分散してしまって、コピペと変わらない。 よろしくないので、CocoaPods でインストールできるように…
UITableView の下に ADBannerView を置くのは、無料+広告アプリでは定番レイアウト。 自分が作る iOS アプリでも採用している。 以前、 っていう記事を書いたけど、この方法はもう使っていない。 UITableView のフッターを設定しているので、表示データが 0 …
objc/runtime.h で定義されている、objc_getAssociatedObject メソッドと objc_setAssociatedObject を使う。 #import <UIKit/UIKit.h> @interface UIViewController (SideMenu) @property (nonatomic, readonly) UIBarButtonItem *menuButtonItem; @end #import "UIViewCon</uikit/uikit.h>…
UITapGestureRecognizer を使う。 ついでに、タップされた位置からセルの indexPath も取得してみる。 // タップされた位置からセルの indexPath を取得 - (void)imageViewTouched:(UITapGestureRecognizer*)sender { CGPoint point = [sender locationInVie…
FontAwesome-iOS、motion-fontawesome を経て、 今は FontAwesomeKit を使っている。 PrideChung/FontAwesomeKit FontAwesomeKit は開発が活発なので、最新の FontAwesome 4.0.3 に対応している。 しかも FontAwesomeKit という名前なのに、FontAwesome 以外…
Underscore.js にインスパイアされた Objective-C のライブラリ Underscore.m を試してみたんだけど、 その使い方にちょっと驚いた。 流れるようなインタフェースで書けるじゃないか。 例えば、公式ページのサンプル。 NSDictionary *dictionary = @{ @"en":…
UITableView を画面いっぱいに表示し、広告を画面下に表示するというのは、 よくある組み合わせだと思う。 このとき、UITableView をスクロールしても、広告は画面下に固定して、ずっと表示していたい。 ただし、Apple の審査に通るために、広告の取得に失敗…
NSPredicate を作成して NSFetchRequest に設定する。これが基本。 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"price > %d", 1000]; [request setPredicate:predicate]; 値段と数量、といった複数の条件で絞り込みたい場合。 条件が固定…
はじめに Inkscape でツールバー用のアイコンを作成していたけど、 すべてのアイコンで通常用とRetina用の2種類作成する必要があってウンザリ。 アイコンが必要になるたび思う。 「FontAwesome みたいなアイコンフォントが使えれば」って。 FontAwesome+iOS …
SVProgressHUD は // インジケーター表示 [SVProgressHUD showWithStatus:@"Sending..."]; // 終了 [SVProgressHUD dismiss]; というコードで簡単にカッコいいインジケーターを表示できて重宝してる。 ただ、普段インジケーターを閉じるのに dismiss を使っ…
AFHTTPClient の getPath に [client getPath:@"user/tasks" parameters:@{ @"status": @[@"completed", @"new"] } success:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { …
Objective-C でも、Ruby みたいに動的にメソッドを追加することができた。 ということは、Objective-C でもメタプログラミングができるね。 今のところ、セレクタを引数に受け取るメソッドのテストで重宝している。 #import "MyTests.h" #import <objc/runtime.h> @implement</objc/runtime.h>…
viewWillDisappear の中で、ナビゲーションコントローラーの管理下に自分自身が含まれているかチェックし、含まれていなければ戻るボタンがタップされたと判断できた。 - (void)viewWillDisappear:(BOOL)animated { if ([self.navigationController.viewCont…
例えば、AFHTTPClient を継承したカスタムクライアントがあるとする。 #import <Foundation/Foundation.h> #import <AFNetworking/AFHTTPClient.h> @interface TodoClient : AFHTTPClient - (void)getTodoList:(void(^)(NSArray*))success failure:(void(^)(NSError*))failure; @end #import "TodoClient.h" @implem</afnetworking/afhttpclient.h></foundation/foundation.h>…
久しぶりの Objective-C。 定番通信ライブラリ『AFNetworking』で、ベーシック認証が設定された Web API にアクセスする方法を README や Github の Wiki で調べてみた。 さっぱりわからない。 仕方ないので、ソースコード読んだり、StackOverflow 漁ったり…
オブジェクトのプロパティの値を UITextField の text に設定しようとしたら 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x2264678'っていうエラーが出てアプリが落ちた。nil が入っているなら例外…
例えば、Web サービスの iPhone クライアントの場合、ユーザーに Web サービスのアカウント名とパスワードを入力してもらう必要がある。で、入力してもらったパスワードを安全に保存しなきゃいけないんだけど、嬉しいことに iOS は Keychain Service という…
iPhone 画面下のツールバーにテキストボックスとボタンを配置して、コメント投稿バーみたいなやつを作ってみた。Storyboard からはツールバーにテキストボックスを直接配置できないけど、テキストボックスを UIBarButtonItem でくるんでツールバーに追加する…
Web API を呼び出している間、画面に何のデータも表示しないってのはユーザーを不安にさせるので、画面中央にインジケーターを表示することにした。標準で UIActivityIndicatorViwe というシンプルなインジケーターが提供されているので、こいつを使ってみる…
Objective-C で Web API を非同期に呼び出すのに使えるライブラリを探していて、ASIHttpRequest や AFNetworking あたりが使えそうだったけど、標準の NSURLConnection にも非同期メソッドがあったのでこちらを使ってみる。練習に、GitHub のリポジトリ一覧…
Web API が返す JSON をパースするライブラリの定番は JSONKit みたいだけど、iOS5 から標準で NSJSONSerialization っていうクラスが提供されているので、こちらを使うことにする。まずは練習として JSON 文字列をパースして NSArray に変換してみた。 // J…
UITableView の編集モードを使って // UITableView に表示するデータの件数を返す -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { return [self.model dataCount]; } // 行はすべて編集可能にする -(BOOL)table…
はじめに CocoaPods 導入したことだし、プロジェクトで使っているライブラリをすべて CocoaPods でインストールし直そうかな。ってことで手始めに TapkuLibrary をインストールしてみる。 devinross/tapkulibrary · GitHub TapkuLibrary は iOS 用 UI 部品を…