UIButButtonItem与UIButton作为自定义视图不会显示

时间:2015-11-26 12:04:12

标签: ios objective-c iphone uibutton uibarbuttonitem

我正在尝试将自定义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的相同实例(没有自定义视图),它会显示在每个导航栏上。知道为什么吗?

3 个答案:

答案 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];
}

我没有做过专业。我只是使用你的代码并更改自定义栏按钮的框架。 我希望这能帮到您。 enter image description here

答案 2 :(得分:0)

问题在于您的邀请按钮初始化:

UIButton *inviteButton = [UIButton UIButtonTypeCustom];

UIButtonTypeCustom是一个枚举值,而不是类方法/便利构造函数。

使用

UIButton *inviteButton = [UIButton buttonWithType:UIButtonTypeCustom];

希望这有帮助