Ios UIBarButtonItem以UIButton作为自定义视图不';我没有出现

Ios UIBarButtonItem以UIButton作为自定义视图不';我没有出现,ios,objective-c,iphone,uibutton,uibarbuttonitem,Ios,Objective C,Iphone,Uibutton,Uibarbuttonitem,我正在尝试将自定义的ui按钮显示为ui导航项的右按钮项 我编写了以下代码: UIButton*inviteButton=[UIButton按钮类型:UIButtonTypeCustom]; [邀请按钮设置标题:@“邀请”状态:UIControlStateNormal]; inviteButton.frame=CGRectMake(0,0,30,30); inviteButton.backgroundColor=[UIColor redColor]; inviteButton.layer.bord

我正在尝试将自定义的
ui按钮
显示为
ui导航项
右按钮项

我编写了以下代码:

UIButton*inviteButton=[UIButton按钮类型:UIButtonTypeCustom];
[邀请按钮设置标题:@“邀请”状态: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*inviteButton=[[UIBarButtonItem alloc]initWithTitle:@“Invite”
风格:uibarbuttonimstyledone
目标:自我
行动:无];

viewController.navigationItem.rightBarButtonItem=inviteButton;
但这显然不是我想要的,因为我想玩的是按钮的外观。


编辑
我试图在许多导航栏中添加相同的
UIBarButtonItem
inviteButtonContainer
)实例。执行此操作后,它仅在最后一个导航栏上可见。

但是,如果我使用同一个简单的
UIBarButtonItem
(没有自定义视图)实例,它会显示在每个导航栏上。你知道为什么吗?

你的问题是邀请按钮初始化器:

UIButton *inviteButton = [UIButton UIButtonTypeCustom];
UIButtonTypeCustom
是枚举值,而不是类方法/构造函数

使用


希望这有助于

->在视图控制器中显示自定义按钮,自定义栏按钮在视图控制器中装箱(即在self中):

->在即将显示的视图控制器中显示自定义栏按钮的步骤

例如,在表视图中选择单元格后显示视图控制器

- (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];
}
我没有完成专业。我只是用了你的代码和改变框架的自定义栏按钮。 我希望这对你有帮助。
您的代码很好,只需更改此行:

    viewController.navigationItem.rightBarButtonItem = inviteButtonContainer;

来自文档:

用于在视图中表示视图控制器的导航项 家长的导航栏


self
本身表示它属于视图控制器,因此无需提及视图控制器实例来添加导航项。

我只是按照您的建议做了,但没有更改任何内容
UIButton
已经是
UIView
的一个子类了,所以我不明白你的意思。你把代码放在哪里了?viewController是什么?你的代码在我这边工作得很好,“邀请”标题没有正确显示(因为它的长度),但是按钮在那里。我在模拟器和iPhone5上运行它。您可能没有在正确的位置使用。对不起,这是在写问题时输入的错误。反正我也不可能遵守这样的规定。我编辑了我的问题。可能是你的框架在按钮上错了(对于文本来说太小了)。尝试调用
[inviteButton sizeToFit]设置文本后。还可以查看在使用类型为:UIButtonTypeRondRect的
按钮时它是否工作
- (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];
}
    viewController.navigationItem.rightBarButtonItem = inviteButtonContainer;
    self.navigationItem.rightBarButtonItem = inviteButtonContainer;