私はXcode 3で "ユーティリティ"プロジェクトテンプレートを使用して1年前に構築したシンプルな2画面アプリケーションを持っています。これにより、アプリケーションデリゲート、メインビュー、およびフリップサイドビューが作成されます。フリップサイドビューには、上部にUINavigationBarがあり、左側にDoneボタンがあります。FlipsideViewControllerの単純なアプリケーションで、完了ボタンが消えるのはなぜですか?
私は最終的にSDK 4.3でXcode 4にアップグレードしました。今すぐアプリケーションをビルドすると、完了ボタンはシミュレータまたはデバイスに表示されません。しかし、Xcode 4の "ユーティリティ"テンプレートを使用して新しいプロジェクトを作成すると、完了ボタンが表示され、正しく機能します。残念ながら、アップグレードではSDK 4.2ファイルが削除されてしまったので、SDK 4.2を再構築することはできません。
新しいテンプレートは、メインビューをウィンドウのサブビューとして追加するのではなく、ウィンドウのrootViewControllerプロパティを使用して別の方法でメインビューを設定することに気付きました(more info here)。このコードをaddSubviewコードの代わりにアプリケーションデリゲートにコピーしようとしましたが、ビューがまったく表示されないため、何かが見逃されているに違いありません...しかし、私はすぐにiOS 3.0互換性を維持しています。私は新しい "ユーティリティ"テンプレートと古いテンプレートに基づいた自分のプロジェクトとの間に他の違いはありません。
また、インターフェイスビルダでleftButtonItemからrightButtonItemに完了ボタンを移動しようとしましたが、それでも表示されません。
MORE INFO:
私はXcodeのインストールで利用可能なiPhoneシミュレータのすべてのバージョンでこれを試してみました。 SDK 4.3でビルドすると、[完了]ボタンはiOS 4.0-4.3シミュレータには表示されませんが、iOS 5(ベータ版)シミュレータには表示されます。
次に、IBOutletsをナビゲーションバー、ナビゲーションアイテム、Interface Builderの完了ボタンに配線して、コードからプローブすることができました。 flipsideビューをpresentModalViewControllerで提示した直後にチェックしたところ、完了ボタン(UIBarButtonItem)は存在しますが、ナビゲーションアイテムのleftBarButtonItemはnullであることがわかりました。完了ボタンをそのプロパティに割り当てると、そのボタンが表示されます。したがって、flipsideビューが初期化または表示されたときに、そのボタンが何らかの形でleftBarButtonItemプロパティから切り離されています。
回避策:
、Interface Builderで私が完了ボタン用のコンセントを表示する場合、私はナビゲーションアイテムのコンセントを表示する場合、私は完了ボタンがそのleftBarButtonItemプロパティにリンクされていることがわかり、しかし、それは持っていますリンクはありません。ナビゲーション項目にリンクすると、ボタンが表示されます。この設定では、[完了]ボタンはナビゲーション項目をコンセントとして表示し、ナビゲーション項目は[完了]ボタンをコンセントとして2回表示します。これは、新しいユーティリティアプリケーションテンプレートでは必要ないので、なぜここに必要なのかわかりません。それは働いているようですが、誰かが説明やより良い解決策を持っているなら、私はそれのために私の答えのポイントを予約します。