2011-10-18 9 views
3

私はiOS開発初心者です。私もそれが離れて戻ってから、別の関数を実行したいiOS - backBarButtonItemをカスタム関数を実行する方法

UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] init]; 
[email protected]"Back"; 
self.navigationItem.backBarButtonItem = temporaryBarButtonItem; 
[temporaryBarButtonItem release]; 

- 私は私のbackBarButtonItemを設定するには、次のコードを使用しています。それは可能ですか?または保存するために別のボタンが必要ですか?

+2

実際には、あなたの 'viewDidDisapper'または' viewWillDisappear'メソッドでそれを行うことができます。このビューを元に戻すだけで、ビューが表示されない場合は、これが機能するはずです。 – JoePasq

+0

それは意味があります。私はそれを受け入れることができるように答えにしたいですか? – Suchi

+1

良い提案。 :) – JoePasq

答えて

7

実際にはviewDidDisappearまたはviewWillDisappearメソッドで行うことができます。

このビューを元に戻すことができ、ビューが表示されない場合は、これが機能するはずです。

ただし、サブビュー、モーダル表示、ナビゲーション階層の詳細表示、またはviewDidDisapperが呼び出されるその他の表示操作を行う予定の場合は、バック・ボタン・コード・ロジックを分離する必要がありますどういうわけか。

たとえば、このビューからモーダルビューを表示する場合は、self.modalViewControllerがnilであるかどうかを確認できます。モーダルビューが存在しない場合は、バックボタンコードを安全に実行できます。それがnilでなければ、モーダルビューが存在し、バックボタンコードを実行すべきではありません。 (viewWillDisappearはモーダルビューコントローラをnil以外のものとして登録する必要があります)。

1

xibにUIBarButtonItemを追加してそこにハンドライベントを追加することができます。

それ以外の場合は、カスタムビュー(UIButtonとaddイベントハンドラ)でUIBarButtonItemを作成します。

3

非常に簡単、試してみてください!

[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(myCoolAction:)]; 

次に、myCoolAction:をビューコントローラの適切なメソッドに変更して処理します。楽しい!

編集:ああ、これをbackBarButtonItemに使用したい場合は、期待通りに動作しません。システムは、あなたのターゲット/アクションをbackBarButtonItemのために呼び出すことはありません。それらは、一旦backBarButtonItemに割り当てられるとクリアされます。

これを処理する1つの方法は、あなたのUINavigationControllerをデリゲートとしてフックアップすることです。それであなたの中で

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 

メソッドは、ここでカスタム動作を行うことができます。

+0

@ JoePasqは、viewDidAppearとviewDidDisAppearも使用できることを指摘しています。しかし、これらのメソッドは、navigation以外の他の状況、例えばpresentModalViewController: - > dismissModalViewControllerAnimated:のように呼び出されます。 – logancautrell

1

厳密に言えば、これはUIKitでは実行できません。

backBarButtonItem上のドキュメントを参照してください。

あなたが設定した目標とバックバーボタンのアクション項目が ゼロでなければなりません。デフォルト値は、ナビゲーション のアイテムのタイトルを表示するバーボタンアイテムです。

回避するには、leftBarButtonItemを指定し、@selectorターゲットを取り付けることにより、必要とどんなカスタム動作添付することです。

トリッキーなビットはボタンの画像そのものです。あなたが知っているように、デフォルトは長方形のボタンではありません。むしろ左側の矢印の形をしています。このためには、ボタンがデフォルトのように見えるようにカスタム画像を設定する必要があります。

資源のトンがそこにすべてのUIKitのアートワークを抽出するために、この1を含むことを行うためにあります:

https://github.com/0xced/UIKit-Artwork-Extractor

1

あなたが代わりにviewDidDisappearまたはviewWillDisappearを使用してのこのような何かを行うことができるはずです。

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(cancelButtonAction:)]; 
self.navigationItem.leftItemsSupplementBackButton = NO; 

その後、あなたのカスタムコードと、このようなバック機能のための方法のcancelButtonAction cancelButtonActionを作成することができます:

- (void)cancelButtonAction:(id)sender { 
    //Your custom code goes here... 


    //This will perform the back functionality if using a Navigation Controller 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

注:これは使用して終了します。このviewDidLoad

場所矢印のない長方形のボタン。

関連する問題