ナビゲーション バーの右ボタンを非表示にし、ユーザーがいくつかのオプションを選択した後に再表示する必要があります。
残念ながら、以下は機能しません。
NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES; // FOO CODE
方法はありますか?
ナビゲーション バーの右ボタンを非表示にし、ユーザーがいくつかのオプションを選択した後に再表示する必要があります。
残念ながら、以下は機能しません。
NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES; // FOO CODE
方法はありますか?
参照を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;
見せる:
[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];
}];
参照を nil に設定:
current_controller_in_navcontroller.navigationItem.rightBarButtonItem = nil;
また、navController 自体ではなく、navController によって現在表示されているコントローラーでこれを呼び出すようにしてください。
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
クレジットは、この質問からの回答であるこの回答に対して学習者に与えられる必要があります。
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....
も何も機能せず、これが見つかるまで何も機能しませんでした。
スイフト 2.2
Swift 2.2 では、self.navigationItem は機能しません。代わりに、NavigationItem のアウトレットを作成し (「nav」の下に名前を付けました)、それを使用します。
また、Xcode 7.3 と Swift 2.2 を使用している場合、次の提案は機能しませんでした
nav.leftBarButtonItem?.customView?.hidden = true
したがって、上記の@Matt Jのアイデアを次のように使用しました(左側に2つのアイテムがあります):
ナビゲーション バーのアイテムのアウトレットとそれらを格納する変数を作成する
@IBOutlet weak var settingItem: UIBarButtonItem!
@IBOutlet weak var logoItem: UIBarButtonItem!
var sav_settingItem: UIBarButtonItem = UIBarButtonItem()
var sav_logoItem: UIBarButtonItem = UIBarButtonItem()
項目を viewDidLoad() に保存します
sav_settingItem = nav.leftBarButtonItems![0]
sav_logoItem = nav.leftBarButtonItems![1]
非表示にするには、それらを nil に設定します
nav.leftBarButtonItem = nil
nav.leftBarButtonItem = nil
それらを表示するには
if (nav.leftBarButtonItem == nil) {
nav.leftBarButtonItem = sav_settingItem
nav.leftBarButtonItems?.append(sav_logoItem)
return
}
私の解決策:
self.navigationItem.rightBarButtonItem.customView.hidden=NO;
Swift 5 で rightBarButtonItem を非表示にする場合
self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
見せる:
//set navigationItem tint color white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor whiteColor];
隠れる:
//set navigationItem tint clear white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor clearColor];