ナビゲーションバーの右ボタンを非表示にし、ユーザーがいくつかのオプションを選択した後に非表示にする必要があります。
残念ながら、以下は機能しません。
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];
個人的には、アプリでnavボタンを@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;
Swift 3
if let button = self.navigationItem.rightBarButtonItem {
button.isEnabled = false
button.tintColor = UIColor.clear
}`
参照をnilに設定します。
current_controller_in_navcontroller.navigationItem.rightBarButtonItem = nil;
また、navController自体ではなく、navControllerによって現在表示されているコントローラーでこれを呼び出すようにしてください。
表示:
[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];
}];
Storyboards&ARC用に更新されたMattのソリューションは次のとおりです。 IBOutletsはデフォルトで__weakであるため、リリースが早すぎないように強力に変更する必要があります。
@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
スイフト2.2
In 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
}
クレジットは、この質問からの回答であるこの回答に対して、学習者に移動する必要があります。
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....
として参照することすら機能せず、これを見つけるまで何も機能しませんでした。
表示:
[self.navigationItem.rightBarButtonItem.customView setHidden:NO];
隠す:
[self.navigationItem.rightBarButtonItem.customView setHidden:YES];
私の解決策:
self.navigationItem.rightBarButtonItem.customView.hidden=NO;
Swift 2:
トリック!
隠す:
if let btn = self.tabBarController!.navigationItem.rightBarButtonItem {
btn.enabled = false
btn.title = ""
}
表示:
if let btn = self.tabBarController!.navigationItem.rightBarButtonItem {
btn.enabled = true
btn.title = "ButtonName"
}
Swift 4で、右または左のボタンを表示/非表示にするトリックがあります。
ステップ1: View ControllerでIBOutletボタンを作成します。
_@IBOutlet var navigationItemButton: UIBarButtonItem!
_
ステップ2:非表示ボタン機能の作成:
_func hideNavigationButton() {
navigationItemButton.isEnabled = false
navigationItemButton.tintColor = UIColor.clear
}
_
ステップ3:表示ボタン機能の作成:
_func showNavigationButton() {
navigationItemButton.isEnabled = true
navigationItemButton.tintColor = UIColor.white
}
_
手順4:必要な関数を呼び出し、hideNavigationButton()
を使用して非表示にし、showNavigationButton()
を使用してボタンを表示します。
よろしく!
右側にバーボタンアイテムが1つしかない場合は、これを使用できます。
self.navigationItem.rightBarButtonItem = nil;
右側に複数のバーボタンがある場合、たとえば、ナビゲーションアイテムの右側に2つのバーボタン項目(検索ボタンとフィルターボタン)があるとします。右のバーボタンのアイテムは
self.navigationItem.rightBarButtonItems = [searchItem、filterItem]
検索ボタンのみを非表示にする必要があります。次のように使用できます。
self.navigationItem.rightBarButtonItems = [filterItem]
これで、ナビゲーションアイテムから検索ボタンを完全に非表示にでき、フィルターアイテムが検索アイテムの代わりに表示されます
表示:
//set navigationItem tint color white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor whiteColor];
隠す:
//set navigationItem tint clear white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor clearColor];
For Swift 5 rightBarButtonItemを非表示にする場合
self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
以下のコードを使用できます:
self.navigationItem.rightBarButtonItem?.image = nil
self.navigationItem.rightBarButtonItem?.isEnabled = false
xxxButton
として参照できると仮定します。(アシスタントエディターを開き、Control + Drag xxxボタンをYourViewControllerクラスにアウトレット "xxxButton"としてドラッグしてください)。
または、_let xxxButton = navigationBar.buttons[1]
_のようなものを使用できます
xxxButton.customView = UIView()
またはnavigationItem.rightBarButtonItems?.remove(at: (navigationItem.rightBarButtonItems?.index(of:xxxButton)!)!)
を非表示
_xxxButton.customView = nil
_またはnavigationItem.rightBarButtonItems?.insert(newElement: xxxButton, at:SOME_INDEX)
を表示
お役に立てば幸いです。
隠れる:
if let topItem = self.navigationController?.navigationBar.topItem {
topItem.rightBarButtonItem = nil
}
最初にタイトルを空に設定し、選択後に再度設定し直します。