以编程方式将选择器添加到导航栏按钮
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.rightBarButtonItem
是nil
,但rightBarButtonItem
与IB 挂钩。
这可能有两个原因:
-
您尚未加载您的笔尖。 (根据我对 UIViewController 的了解,这似乎不太可能。)
navigationItem
、navigationController
或 self
是 nil
。
请记住,属性访问表达式实际上是消息表达式。例如,如果self.navigationController
是nil
,那么发送navigationItem
消息将返回nil
。如果,无论哪种方式,self.navigationController.navigationItem
是nil
,那么询问它的rightBarButtonItem
将返回nil
。
检查每个子表达式——self
、self.navigationController
和 self.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:)];
【讨论】:
以上是关于以编程方式将选择器添加到导航栏按钮的主要内容,如果未能解决你的问题,请参考以下文章