我正在尝试将自定义UIButton
显示为UINavigationItem
的{{1}}。
我写了以下代码:
rightBarButtonItem
我的导航栏中没有显示任何内容。
但是,使用以下代码,我可以看到一个基本按钮:
UIButton *inviteButton = [UIButton buttonWithType:UIButtonTypeCustom];
[inviteButton setTitle:@"Invite" forState:UIControlStateNormal];
inviteButton.frame = CGRectMake(0, 0, 30, 30);
inviteButton.backgroundColor = [UIColor redColor];
inviteButton.layer.borderColor = [UIColor blueColor].CGColor;
inviteButton.layer.borderWidth = 1.0f;
UIBarButtonItem *inviteButtonContainer = [[UIBarButtonItem alloc] initWithCustomView:inviteButton];
viewController.navigationItem.rightBarButtonItem = inviteButtonContainer;
但它显然不是我追求的,因为我希望玩按钮外观。
UIBarButtonItem *inviteButton = [[UIBarButtonItem alloc] initWithTitle:@"Invite"
style:UIBarButtonItemStyleDone
target:self
action:nil];
viewController.navigationItem.rightBarButtonItem = inviteButton;
(UIBarButtonItem
)的相同实例添加到许多导航栏。这样做,它只在最后一个导航栏上可见
但是,如果我使用简单inviteButtonContainer
的相同实例(没有自定义视图),它会显示在每个导航栏上。知道为什么吗?
答案 0 :(得分:2)
您的代码很好,只需更改此行:
viewController.navigationItem.rightBarButtonItem = inviteButtonContainer;
到
self.navigationItem.rightBarButtonItem = inviteButtonContainer;
来自文档:
用于表示视图控制器的导航项 父母的导航栏。
self
本身表示它属于视图控制器,因此无需提及视图控制器实例来添加导航项。
答案 1 :(得分:1)
- >要在视图控制器中显示自定义按钮,其中自定义栏按钮是自动创建的(即自我):
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *inviteButton = [UIButton buttonWithType:UIButtonTypeCustom];
[inviteButton setTitle:@"Invite" forState:UIControlStateNormal];
inviteButton.frame = CGRectMake(0, 0, 70, 30);
inviteButton.backgroundColor = [UIColor redColor];
inviteButton.layer.borderColor = [UIColor blueColor].CGColor;
inviteButton.layer.borderWidth = 1.0f;
UIBarButtonItem *inviteButtonContainer = [[UIBarButtonItem alloc] initWithCustomView:inviteButton];
controller.navigationItem.rightBarButtonItem = inviteButtonContainer;
}
- >在即将出现的视图控制器中显示自定义栏按钮
例如。在表视图中选择单元格后显示视图控制器
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DjDetailsViewController *controller = (DjDetailsViewController *)
[self.storyboard instantiateViewControllerWithIdentifier:@"DjDetailsViewController"];
UIButton *inviteButton = [UIButton buttonWithType:UIButtonTypeCustom];
[inviteButton setTitle:@"Invite" forState:UIControlStateNormal];
inviteButton.frame = CGRectMake(0, 0, 70, 30);
inviteButton.backgroundColor = [UIColor redColor];
inviteButton.layer.borderColor = [UIColor blueColor].CGColor;
inviteButton.layer.borderWidth = 1.0f;
UIBarButtonItem *inviteButtonContainer = [[UIBarButtonItem alloc] initWithCustomView:inviteButton];
controller.navigationItem.rightBarButtonItem = inviteButtonContainer;
[self.navigationController pushViewController:controller animated:YES];
}
答案 2 :(得分:0)
问题在于您的邀请按钮初始化:
UIButton *inviteButton = [UIButton UIButtonTypeCustom];
UIButtonTypeCustom
是一个枚举值,而不是类方法/便利构造函数。
使用
UIButton *inviteButton = [UIButton buttonWithType:UIButtonTypeCustom];
希望这有帮助