4

私はiOS開発の初心者です。次のコードを使用して backBarButtonItem を設定しています -

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

また、戻ることとは別に、別の機能を実行したいと考えています。それは可能ですか?または、保存するには別のボタンが必要ですか?

4

5 に答える 5

7

viewDidDisappearorviewWillDisappearメソッドで実際にそれを行うことができます。

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

ただし、サブビューやモーダル ビューを表示したり、ナビゲーション階層をさらに深くしたり、viewDidDisapper呼び出される他のビュー操作を実行したりする予定がある場合は、戻るボタンのコード ロジックを何らかの方法で分離する必要があります。

たとえば、このビューからモーダル ビューを表示する場合self.modalViewControllerは、nil かどうかを確認できます。nil の場合は、モーダル ビューが存在せず、戻るボタンのコードを安全に実行できます。nil でない場合、モーダル ビューが存在し、戻るボタンのコードを実行してはなりません。(viewWillDisappearモーダルView Controllerをnot-nilとして登録する必要があります)。

于 2011-10-18T20:37:09.543 に答える
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

そこでいくつかのカスタム動作を実行できる方法。

于 2011-10-18T20:20:34.610 に答える
2

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

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

設定するバックバー ボタン アイテムのターゲットとアクションは nil にする必要があります。デフォルト値は、ナビゲーション アイテムのタイトルを表示するバー ボタン アイテムです。

回避策は、 を指定し、ターゲットleftBarButtonItemをアタッチすることで必要なカスタム動作をアタッチすることです。@selector

注意が必要なのは、ボタンの画像そのものです。ご存じのように、デフォルトは長方形のボタンではありません。むしろ、左側の矢印の形をしています。このためには、カスタム イメージを設定して、ボタンがデフォルトのように見えるようにする必要があります。

UIKit のすべてのアートワークを抽出するためのリソースがたくさんあります。

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

于 2012-04-11T14:23:04.413 に答える
1

viewDidDisappearまたはを使用する代わりに、このようなことができるはずですviewWillDisappear

これを次の場所に配置しviewDidLoadます。

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

cancelButtonAction次に、カスタム コード用のメソッド cancelButtonAction と次のような back 機能を作成できます。

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


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

注: これは、矢印のない長方形のボタンを使用することになります。

于 2013-10-10T20:37:00.680 に答える
1

UIBarButtonItem を xib に追加し、そこにハンドラー イベントを追加できます。

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

于 2011-10-18T20:13:28.257 に答える