Lau*_*ell 38 objective-c uibarbuttonitem rightbarbuttonitem ios
我需要在导航栏中隐藏右键,然后在用户选择一些选项后取消隐藏它.
不幸的是,以下不起作用:
NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES; // FOO CODE
Run Code Online (Sandbox Code Playgroud)
有办法吗?
小智 73
通过将引用设置为nil来隐藏按钮,但是如果您想稍后恢复它,则需要挂起它的副本以便重新分配它.
UIBarButtonItem *oldButton = self.navigationItem.rightBarButtonItem;
[oldButton retain];
self.navigationItem.rightBarButtonItem = nil;
//... later
self.navigationItem.rightBarButtonItem = oldButton;
[oldButton release];
Run Code Online (Sandbox Code Playgroud)
就个人而言,在我的应用程序中,我将导航按钮设置为@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;
Run Code Online (Sandbox Code Playgroud)
ric*_*chc 12
对于Swift 3
if let button = self.navigationItem.rightBarButtonItem {
button.isEnabled = false
button.tintColor = UIColor.clear
}`
Run Code Online (Sandbox Code Playgroud)
小智 9
设置参考nil:
current_controller_in_navcontroller.navigationItem.rightBarButtonItem = nil;
Run Code Online (Sandbox Code Playgroud)
另外一定要在navController当前显示的控制器中调用它,而不是navController本身.
小智 8
节目:
[self.navigationItem.rightBarButtonItem.customView setAlpha:1.0];
Run Code Online (Sandbox Code Playgroud)
隐藏:
[self.navigationItem.rightBarButtonItem.customView setAlpha:0.0];
Run Code Online (Sandbox Code Playgroud)
您甚至可以为其显示/隐藏设置动画
[UIView animateWithDuration:0.2 animations:^{
[self.navigationItem.rightBarButtonItem.customView setAlpha:1.0];
}];
Run Code Online (Sandbox Code Playgroud)
如果右侧只有一个栏按钮项,则可以使用此一项,
self.navigationItem.rightBarButtonItem = nil;
假设您的右侧有多个栏按钮,例如,假设您的导航项的右侧有两个栏按钮项目(搜索按钮和过滤按钮)。现在右栏按钮项目是
self.navigationItem.rightBarButtonItems = [searchItem,filterItem]
你必须只隐藏搜索按钮,你可以使用像,
self.navigationItem.rightBarButtonItems = [filterItem]
现在发生的事情是,您可以从导航项中完全隐藏搜索按钮,并且过滤项出现在搜索项的位置
这是Matt为Storyboards&ARC更新的解决方案.请记住,默认情况下,IBOutlets是__weak,因此您需要将其更改为strong,以免过早发布.
@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
Run Code Online (Sandbox Code Playgroud)
展示:
[self.navigationItem.rightBarButtonItem.customView setHidden:NO];
Run Code Online (Sandbox Code Playgroud)
隐藏:
[self.navigationItem.rightBarButtonItem.customView setHidden:YES];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62650 次 |
| 最近记录: |