47

ナビゲーション バーの右ボタンを非表示にし、ユーザーがいくつかのオプションを選択した後に再表示する必要があります。

残念ながら、以下は機能しません。

NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES;  // FOO CODE

方法はありますか?

4

18 に答える 18

80

参照をnilに設定してボタンを非表示にしますが、後で復元する場合は、ボタンを再割り当てできるように、そのコピーを保持する必要があります。

UIBarButtonItem *oldButton = self.navigationItem.rightBarButtonItem;
[oldButton retain];
self.navigationItem.rightBarButtonItem = nil;

//... later
self.navigationItem.rightBarButtonItem = oldButton;
[oldButton release];

個人的には、私のアプリでは、ナビゲーションボタンを@propertiesにして、ゴミ箱に入れて自由に再作成できるようにしています。

//mycontroller.h
UIBarButtonItem *rightNavButton;
@property (nonatomic, retain) UIBarButtonItem *rightNavButton;

//mycontroller.m
@synthesize rightNavButton;
- (UIBarButtonItem *)rightNavButton {
    if (!rightNavButton) {
        rightNavButton = [[UIBarButtonItem alloc] init];
        //configure the button here
    }
    return rightNavButton;
}

//later, in your code to show/hide the button:
self.navigationItem.rightBarButtonItem = self.rightNavButton;
于 2011-04-07T23:57:03.283 に答える
11

見せる:

[self.navigationItem.rightBarButtonItem.customView setAlpha:1.0];

隠れる:

[self.navigationItem.rightBarButtonItem.customView setAlpha:0.0];

表示/非表示をアニメーション化することもできます

[UIView animateWithDuration:0.2 animations:^{
        [self.navigationItem.rightBarButtonItem.customView setAlpha:1.0];

    }];
于 2013-10-15T07:40:13.010 に答える
10

参照を nil に設定:

current_controller_in_navcontroller.navigationItem.rightBarButtonItem =  nil;

また、navController 自体ではなく、navController によって現在表示されているコントローラーでこれを呼び出すようにしてください。

于 2011-04-07T23:44:04.570 に答える
5

Here's Matt's solution updated for Storyboards & ARC. Remember, IBOutlets are __weak by default, so you need to change that to strong for it not to be released too early.

@interface MAGTableViewController () <UITextFieldDelegate>

@property (strong, nonatomic) IBOutlet UIBarButtonItem *rightBarButton;

@end

@implementation MAGTableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.navigationItem setRightBarButtonItem:nil];
}

- (IBAction)rightBarButtonItemTapped:(id)sender
{
    [self.view endEditing:YES];
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self.navigationItem setRightBarButtonItem:self.rightBarButton];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self.navigationItem setRightBarButtonItem:nil];
}

@end
于 2013-07-21T08:52:41.333 に答える
4

クレジットは、この質問からの回答であるこの回答に対して学習者に与えられる必要があります。

iOS-7 で左ナビゲーション バー ボタンをオンデマンドで非表示および表示する

これが答えであり、はるかに単純です。

//hide and reveal bar buttons
-(void) hideAndDisableLeftNavigationItem
{
    [self.navigationItem.leftBarButtonItem setTintColor:[UIColor clearColor]];
    [self.navigationItem.leftBarButtonItem setEnabled:NO];
}

-(void) showAndEnableLeftNavigationItem
{
    [self.navigationItem.leftBarButtonItem setTintColor:[UIColor blueColor]];
    [self.navigationItem.leftBarButtonItem setEnabled:YES];
}

次に、次のように必要なメソッドを参照するだけです(IBAction)

[self hideAndDisableLeftNavigationItem];//[self showAndEnableLeftNavigationItem]; to show again

私は他のすべての方法を試しましたが、ボタンを として参照して@property (...) UIBarButtonItem....も何も機能せず、これが見つかるまで何も機能しませんでした。

于 2014-12-03T02:57:33.630 に答える
4

スイフト 2.2

Swift 2.2 では、self.navigationItem は機能しません。代わりに、NavigationItem のアウトレットを作成し (「nav」の下に名前を付けました)、それを使用します。

また、Xcode 7.3 と Swift 2.2 を使用している場合、次の提案は機能しませんでした

 nav.leftBarButtonItem?.customView?.hidden = true

したがって、上記の@Matt Jのアイデアを次のように使用しました(左側に2つのアイテムがあります):

  1. ナビゲーション バーのアイテムのアウトレットとそれらを格納する変数を作成する

    @IBOutlet weak var settingItem: UIBarButtonItem!
    @IBOutlet weak var logoItem: UIBarButtonItem!
    
    var sav_settingItem: UIBarButtonItem = UIBarButtonItem()
    var sav_logoItem: UIBarButtonItem = UIBarButtonItem()
    
  2. 項目を viewDidLoad() に保存します

    sav_settingItem = nav.leftBarButtonItems![0]
    sav_logoItem = nav.leftBarButtonItems![1]
    
  3. 非表示にするには、それらを nil に設定します

    nav.leftBarButtonItem = nil
    nav.leftBarButtonItem = nil
    
  4. それらを表示するには

    if (nav.leftBarButtonItem == nil) {
        nav.leftBarButtonItem = sav_settingItem
        nav.leftBarButtonItems?.append(sav_logoItem)
        return
    }
    
于 2016-09-02T14:28:18.597 に答える
3

私の解決策:

self.navigationItem.rightBarButtonItem.customView.hidden=NO;
于 2015-10-28T12:08:10.253 に答える
1

Swift 5 で rightBarButtonItem を非表示にする場合

self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
于 2019-08-01T06:14:31.690 に答える
0

見せる:

//set navigationItem tint color white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor whiteColor];

隠れる:

//set navigationItem tint clear white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor clearColor];
于 2014-09-19T07:34:33.263 に答える