以编程方式将选择器添加到导航栏按钮

Posted

技术标签:

【中文标题】以编程方式将选择器添加到导航栏按钮【英文标题】:Adding selector to navigationbar button programmatically 【发布时间】:2010-11-06 13:55:27 【问题描述】:

嘿,我正在尝试以编程方式将选择器添加到导航栏中的按钮,但我似乎无法找出它根本不起作用的原因。这是我得到的代码:

[self.navigationController.navigationItem.rightBarButtonItem setAction:@selector(showWithLabel)];

我这样做是否正确,还有什么我应该做的吗?

编辑:我发现按钮是nil,我不明白,因为它连接到rightBarButton 插座。

EDIT(Again): 我发现navigationitem 是nil,知道问题出在哪里吗?

【问题讨论】:

检查rightBarButtonItem是否为nil。 确实是零,我不知道为什么它连接为 rightbarbutton 插座? 不应该是[self.navigationItem.rightBarButtonItem ...吗? 【参考方案1】:

我以前就是这样做的,效果很好

presetButton = [[UIButton alloc] initWithFrame:framePresetButton]; UIImage *presetBtnBG = [[[UIImage imageNamed:@"segment_tools.png"] stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0] 保留]; [presetButton setImage:presetBtnBG forState:UIControlStateNormal]; presetButtonItem = [[UIBarButtonItem alloc] initWithCustomView:presetButton]; [presetButton addTarget:self action:@selector(loadPreset) forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.rightBarButtonItem = presetButtonItem;

【讨论】:

【参考方案2】:

所以你说self.navigationController.navigationItem.rightBarButtonItemnil,但rightBarButtonItem 与IB 挂钩。

这可能有两个原因:

    您尚未加载您的笔尖。 (根据我对 UIViewController 的了解,这似乎不太可能。) navigationItemnavigationControllerselfnil

请记住,属性访问表达式实际上是消息表达式。例如,如果self.navigationControllernil,那么发送navigationItem 消息将返回nil。如果,无论哪种方式,self.navigationController.navigationItemnil,那么询问它的rightBarButtonItem 将返回nil

检查每个子表达式——selfself.navigationControllerself.navigationController.navigationItem——并查看哪个是 nil。然后,修复那个。

【讨论】:

好吧,我发现导航项是nil。【参考方案3】:

你还应该设置一个接收动作的目标(我想你会使用'self'):

[self.navigationController.navigationItem.rightBarButtonItem setAction:@selector(showWithLabel)];
[self.navigationController.navigationItem.rightBarButtonItem setTarget:self];

【讨论】:

【参考方案4】:

只需尝试在 viewDidLoad 方法中以编程方式创建 rightBarButtonItem:

UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editEventQuestion)]; 
self.navigationItem.rightBarButtonItem = rightBarButtonItem;
[rightBarButtonItem release];

【讨论】:

【参考方案5】:

尝试在选择器名称后添加一个冒号,如下所示:

[self.navigationController.navigationItem.rightBarButtonItem setAction:@selector(showWithLabel:)];

【讨论】:

以上是关于以编程方式将选择器添加到导航栏按钮的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将按钮添加到导航栏

如何将导航栏按钮添加到选择器

以编程方式将系统图像添加到导航栏

如何以编程方式添加实际适合屏幕的导航栏?

以编程方式将约束添加到导航栏 Swift

swift Swift - 以编程方式添加导航栏标题和按钮