甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

UIKit

UIWebViewのコンテンツ読み込みメソッドで最近はまったこと

UIWebViewには、表示するコンテンツを読み込むためのメソッドとして、次の3つが用意されている。 loadRequest: loadHTMLString:baseURL: loadData:MIMEType:textEncodingName:baseURL: これらのメソッドはコンテンツ読み込みを行うという点では同じだけれど…

Camera Overlay Viewを設定するとiOS 7.0以降でアプリが操作不能になる問題への対処方法

UIImagePickerControllerを使った写真撮影機能を実装していたとき、iOS 7未満では何の問題もない次のようなコードを実行すると、iOS 7.0以降ではシャッターボタンをタップして写真撮影を行ったぐらいのタイミングでアプリが操作不能になる現象が発生した。 -…

実行時警告「Attempt to dismiss from view controller while a presentation or dismiss is in progress!」への対応

EventKitを利用したAppを開発していたとき、イベント編集画面のView Controller*1上で「完了」/「キャンセル」/「イベントを削除」のいずれかのボタンがタップされたタイミングでこのView Controllerをdismissするために、eventEditViewController:didComple…

UIImagePickerControllerでデバイスの向きの変更を無視する

UIImagePickerControllerを利用して写真を撮影するとき、Portrait固定にしたいのになかなかできず苦労した。 失敗例 以下の方法を試してみたが、うまくいかなかった。 Xcodeのビルドターゲットの設定で「Supported Interface Orientations」を「Portrait」の…

文字列(NSStringオブジェクト)を画像化する方法

文字列を画像化する方法を調べてみたら、オフスクリーン描画をしてグラフィックスコンテキストから画像を得る方法が簡単だった。 Page not found · GitHub Pages 上記のページを参考にして、指定されたサイズの領域の中央に文字列を描画して画像化するコード…

複数のStoryboardファイルを使ってViewの遷移を行う方法

Storyboardを使用することによって、1つのファイルで複数のViewの内部構成や各View間の遷移する様子を設計することができる。ところが、Viewの数が多いプロジェクトでは、1つのStoryboardでそれらのViewを一括管理しようとすると、従来のXibファイルを用いた…

appearanceプロキシを使ってUI要素の外見を一括カスタマイズ

iOS 5.0より前のバージョンのiOS SDKではUI要素の外見をカスタマイズするためには、 各オブジェクトごとにプロパティの変更等の個別設定を行う サブクラス化してdrawRect:をオーバーライドする などの方法をとらなければらななかったが、iOS 5.0では各種UI要…

iOS 5.0ではUIActivityIndicatorViewが表示されなくなる場合があることに注意

iOS 5.0ではUIActivityIndicatorViewが表示されなくなることがある UIActivityIndicatorViewを使用しているプロジェクトをXcode 4.1以前で作成し、そのプロジェクトをXcode 4.2でiOS 5.0向けにビルド・実行すると、UIActivityIndicatorViewが表示されないこ…

UIWebViewの使用上の簡単な注意

UIWebViewを使用する上での簡単な注意点をいくつか。 UIWebViewオブジェクトはリリース前にdelegateにnilを設定しておくこと リリース前にdelegateにnilを設定しておく必要があるのは、次のページで詳細に説明されているように、UIWebViewのロード処理が別ス…

Popover内のNavigation Controllerのpush/popに応じてPopoverのサイズを調整する

iPad AppでPopover内にNavigationベースのViewを表示するときの話。*1 Popoverのサイズが元に戻らないことがある Navigation ControllerのRoot Viewのサイズが、その1つ下の階層のView(ここでは「Second View」と呼ぶ)のサイズよりも小さい場合、Second Vi…

NavigationControllerが管理するViewControllerのviewWillAppear:animatedおよびviewDidAppear:animatedがコールされない場合の対処方法

UITabBarControllerで複数のNavigation Controllerを切り替える形式のUIを実装し、動作確認してみた。すると、各Navigation Controllerが管理するView ControllerではviewWillAppear:animatedおよびviewDidAppear:animatedがコールされていないことに気がつ…

タブ選択時に選択されたタブに対応するViewControllerのRootViewを表示する

iOS Appではタブ選択時には対応するViewControllerのRootViewを表示すべき? - 甘いものが好きです上記リンクの記事では、タブ選択時にはそのタブに対応するViewControllerのRootViewを表示すべきことがAppleの資料に記載されていることを指摘した。そこで、…

iOS Appではタブ選択時には対応するViewControllerのRootViewを表示すべき?

UITabBarControllerの各タブにNavigationベースのViewを対応づけておく場合、実装方法によっては、あるタブに対応するViewで階層を掘り下げて表示している状態でタブを切り替えてからまた元のタブに戻したときに、下の階層が表示されたままになってしまう。…

searchResultsTableViewのスタイルをGroupedにするのは無理?

iOS SDK 4.3現在の話。UISearchResultControllerを使用して検索機能を実装している。検索結果を表示するTableView (searchResultsTableView) 上で、1件の検索結果に対して複数の項目を表示したい。1つの項目だけであれば、TableViewのスタイルをPlain (UITab…

UIViewのアニメーションの二重実行を防ぐ

UIViewのアニメーションの二重実行を防ぐためには、実行開始時にフラグを立てて実行終了後にフラグを落とせばよい。UIViewクラスのクラスメソッドsetAnimationDelegate:でdelegateを設定すると、アニメーションが終了したタイミングでdelegateのanimationDid…