嘿,我正在尝试以编程方式向导航栏中的按钮添加一个选择器,而我似乎无法找出它根本不起作用的原因。这是我得到的代码:
[self.navigationController.navigationItem.rightBarButtonItem setAction:@selector(showWithLabel)];
我这样做是否正确,还有什么我应该做的吗?
编辑:我发现按钮是nil
,我不明白,因为它与rightBarButton
插座连接。
编辑(再次):我发现导航项目是零,任何想法都在哪里?
答案 0 :(得分:2)
我习惯这样做并且工作正常
presetButton = [[UIButton alloc] initWithFrame:framePresetButton]; UIImage *presetBtnBG = [[[UIImage imageNamed:@"segment_tools.png"] stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0] retain]; [presetButton setImage:presetBtnBG forState:UIControlStateNormal]; presetButtonItem = [[UIBarButtonItem alloc] initWithCustomView:presetButton]; [presetButton addTarget:self action:@selector(loadPreset) forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.rightBarButtonItem = presetButtonItem;
答案 1 :(得分:1)
所以你说self.navigationController.navigationItem.rightBarButtonItem
是nil
,但是rightBarButtonItem
被联系在IB中。
这可能有两个原因:
navigationItem
,navigationController
或self
为nil
。请记住,属性访问表达式实际上是消息表达式。如果self.navigationController
是nil
,那么发送navigationItem
消息将返回nil
。如果self.navigationController.navigationItem
为nil
,rightBarButtonItem
为nil
,那么请求self
self.navigationController
。
检查每个子表达式 - self.navigationController.navigationItem
,nil
和{{1}} - 并查看哪一个是{{1}}。然后,修复那个。
答案 2 :(得分:0)
尝试在选择器名称后添加冒号,如下所示:
[self.navigationController.navigationItem.rightBarButtonItem setAction:@selector(showWithLabel:)];
答案 3 :(得分:0)
你还应该设置一个接收动作的目标(我想你会使用'self'):
[self.navigationController.navigationItem.rightBarButtonItem setAction:@selector(showWithLabel)];
[self.navigationController.navigationItem.rightBarButtonItem setTarget:self];
答案 4 :(得分:0)
尝试在viewDidLoad方法中以编程方式创建rightBarButtonItem:
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editEventQuestion)];
self.navigationItem.rightBarButtonItem = rightBarButtonItem;
[rightBarButtonItem release];