2011-06-24 3 views
0

私は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回表示します。これは、新しいユーティリティアプリケーションテンプレートでは必要ないので、なぜここに必要なのかわかりません。それは働いているようですが、誰かが説明やより良い解決策を持っているなら、私はそれのために私の答えのポイントを予約します。

答えて

1

カスタムBarButtonItemの同様の問題がありましたが、私はそれがかなり同じ問題であると確信していません。私は:)

問題をやったようなので、私はあなたの質問時に誰かがつまずく場合の答えを投稿しています: は、カスタムの背景とナビゲーションバーに次のコードを使用してカスタムUIBarButtonItemを追加します。別のView Controllerをプッシュして戻ると、カスタムUIBarButtonItemは表示されませんが、以前の場所に触れ続け、ターゲットアクションを呼び出すことができます。 この問題はiOS4.3シミュレータでのみ発生し、iOS5シミュレータの解決策がなくてもすべて正常に動作します。 (すべてがiOS5デバイスでも正常に動作し、iOS4でコードを試すことはできませんでした。3デバイス)

UIButton* doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [doneButton setBackgroundImage:[UIImage imageNamed:@"barbutton.png"] forState:UIControlStateNormal]; 
    [doneButton setTitle:@"Done" forState:UIControlStateNormal]; 
    doneButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.0]; 
    [doneButton.layer setCornerRadius:5.0]; 
    [doneButton.layer setMasksToBounds:YES]; 
    [doneButton.layer setBorderWidth:0.2]; 
    [doneButton.layer setBorderColor:[[UIColor blackColor] CGColor]]; 
    doneButton.frame = CGRectMake(0.0, 0.0, 70.0, 30.0); 
    [doneButton addTarget:self action:@selector(doneButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 
    doneBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myLocationButton]; 
    self.navigationItem.leftBarButtonItem = doneBarButtonItem; 

対処: UIButton層のz屈折率の設定に関連するコードの次の行を追加することは私のために問題を解決しました。

[doneButton.layer setZPosition:2]; 

あなたは層関連のプロパティ/メソッドを使用するために<QuartzCore/QuartzCore.h>を含める必要が

関連する問題