13

4つのビューコントローラーを備えたタブバーコントローラーがあり、ナビゲーションコントローラーにこのタブバーコントローラーがあります。

タブバーコントローラーの1つの特定のビューコントローラーに対してUIBarButtonItemを表示したいと思います。

以下を使ってみました

if (tabBarController.selectedViewController == customTourViewController)
    {
        [tabBarController.navigationItem setRightBarButtonItem:done];
    }

ただし、ボタンは表示されません。

すべてのビューコントローラーをナビゲーションコントローラーに配置すると、そのビューに対してのみボタンが表示されますが、ナビゲーションバーが2つになります。

最初のソリューションを実装する方法はありますか?ありがとう。

4

3 に答える 3

28

個々のタブの個々のビューコントローラーには、ボタンが必要なものに次のものがあります。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                    style:UIBarButtonSystemItemDone target:nil action:nil];
    self.tabBarController.navigationItem.rightBarButtonItem = rightButton;
}

そして、ボタンを必要としないビューコントローラには、次のものがあります。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.tabBarController.navigationItem.rightBarButtonItem = nil;
}

したがって、それが機能しない場合は、それが指定tabBarControllerなしの参照であるかどうかはわかりませんself(省略した場合self、コンパイラエラーが発生します)。そして、このコードはどこにありますか?それがtabBarControllerサブクラスにある場合は、必要ですself.navigationItem.rightBarButtonItemよね?その変数名に独自のivarを定義していますか?または、それdoneが適切に定義されている(つまり、定義されていないnil)と確信していますか?または、このコードが呼び出されていることを確認しますか(おそらく、ブレークポイントを設定するか、を挿入して、NSLogこのコードに到達していることを確認してください)。

于 2012-07-24T04:32:25.957 に答える
6

または、ボタンが必要な同じビューにviewWillDisappearを実装することもできます。

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];        
    self.tabBarController.navigationItem.rightBarButtonItem = nil;
}
于 2013-04-11T18:01:38.093 に答える
1

上記の受け入れられた答えはまさに私が必要としていたものであり、将来それらのためにそれをSwiftに変換したかっただけです。

以下のコードを、バーボタンを必要とするView Controllerに追加しました(この例では追加ボタンを作成しました)。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

self.tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: nil)
}

このバーボタンを必要としないViewControllerで、以下のコードを追加するだけです。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

self.tabBarController?.navigationItem.rightBarButtonItem = nil
}

ユーザーが指定されたビューコントローラーに移動するたびにバーボタンを表示するため、viewWillAppear副を使用します。viewDidAppear

簡単に言うviewDidAppearと、実行時に1回呼び出され、ViewControllerにviewWillAppearアクセスするたびに呼び出されます。

于 2019-05-16T22:52:22.780 に答える