Objective-Cのあるひとつのメソッド内のあちこちで実行される処理があるような時に、ブロックを変数に入れて何ヶ所かで呼び出したい時がある。書き方をよく忘れるので、Objective-CでBlockを変数に入れる方法の具体例を挙げる。
タグ: iOS
星でレーティングするAXRatingViewをつくった
https://github.com/akiroom/AXRatingView
iOSアプリを作っていて星をタップしてレーティングできるビューが欲しかったのですが、フラットデザインっぽい感じで色々設定できるようなライブラリが見つからなかったので、自分で作りました。上のスクリーンショットを見ていただければ分かる通り、以下のような特長があります。
- 漸次的/段階的なレーティング
- 自由な文字を設定できる
- 自由な画像を設定できる
- editable/non-editableの切り替えが可能
- 星の数を増減できる
- addTarget:action:forControlEvents:で簡単に変更の通知イベントを割り当てられる
- ★マークのような画像リソースの用意が不要
ソースコードのダウンロードは以下のURLからできます。
https://github.com/akiroom/AXRatingView
既にcocoapodsに登録済みなので、Podfileに次のように書いてpod installすればすぐに使えます。
pod 'AXRatingView', '~> 0.9.4'
heightForHeaderInSection:とheightForFooterInSection:のデフォルト値
UITableViewControllerの中でヘッダーやフッターの高さを変えたいけど、デフォルトの高さも使いたい時。UITableViewAutomaticDimensionを返せばよい。
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section == 0) { return 32.0; } else { return UITableViewAutomaticDimension; } }
Xcodeが起動中にフリーズする時の解決方法
Xcodeが「Welcome to Xcode」の画面を出す前の何もダイアログがない状態でフリーズして、まったく起動しなくなってしまった。
NSStringが指定した文字のみで構成されているかチェック
NSStringが特定の文字だけで構成されているか判定したいことがある。文字種だけの問題で正規表現を使う程ではない、という時は、NSCharacterSetの包含関係の判定を使うと簡単にチェックできる。パスワードのValidationとか、UITextFieldに数字のみを受け付ける場合のちょっとしたチェックなどに便利。
StoryboardのTableViewでセルがはみ出して操作できない
StoryboardにUITableViewControllerを置いて、Prototype Cellを設定している時、様々な種類のセルを設定しているうちに、ViewControllerの高さが足りなくて下の方の要素が見られないことがある。その時の対処法。
以下の記事を参考にしたら解決した。
Can’t scroll to the bottom of a long Static TableViewController in XCode 5 Interface Builder to edit the cells below the fold
StoryBoard上でスクロールできるようにしたいViewControllerを選択して、Attributes InspectorのView ControllerのExtend Edgesの中にある”Under Top Bars”と”Under Bottom Bars”のチェックを外す。
この2つのチェックを外すと、TableViewの上でスクロールできるようになる。
Thanks to @shao1555!
Xcodeで”Could not read from the device.”というエラー
Xcode4でiOSアプリのコンパイルは通るのに実機で起動しようとするとCould not read from the device.
と出る場合の対処方法
しばらく経つと、Could not start debugserver on “(iPhoneの名前)” when trying to launch “(アプリケーションの名前)”
とも表示された。
UINavigationControllerのtopViewControllerのクラスを取得
当ブログのアクセスログを見ていると、「ios クラス名 topviewcontroller」という検索ワードが。UINavigationControllerのtopViewControllerのクラス名を取得したい場合や、クラスごとに処理を分岐させるには、以下のように書けばよい。
ポイント
- [instance class]とすると、そのインスタンスのクラスオブジェクト(Class)が取得できる
- NSStringFromClass()関数を使うと、クラスオブジェクトの名前をNSStringに変換できる
- [instance isMemberOfClass:aClass]とすると、そのインスタンスがaClassのインスタンスである場合のみYESが返ってくる。
- [instance isKindOfClass:aClass]とすると、そのインスタンスがaClassのインスタンスか、あるいはaClassを継承したクラスのインスタンスかどちらかの場合に、YESが返ってくる
iOSのUIデザインパターン集を6つ
iOSアプリケーションを開発していて、UIに悩んだ時にほしくなるデザインパターン集。よくURLを忘れるのでウェブログにメモ。
UIWebViewでNSBundle内のリソースを読み込むと”WebKit discarded an uncaught exception”とエラー
UIViewControllerのviewWillAppearの中でUIWebViewに対してバンドル内のリソースを読み込もうとすると、エラーが起きた。しかも、実機では狙った通り動くのに、iOSシミュレーターでのみエラーが起きる。書いたコードは以下の通り。
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:path]]; [self.webView loadRequest:request]; }
起きたエラーは次の通り。
*** WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate:*** -[NSRegularExpression enumerateMatchesInString:options:range:usingBlock:]: nil argument
続きを読む UIWebViewでNSBundle内のリソースを読み込むと”WebKit discarded an uncaught exception”とエラー