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

时间:2010-11-06 13:55:28

标签: iphone cocoa-touch uikit ios uinavigationcontroller

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

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

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

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

编辑(再次):我发现导航项目是零,任何想法都在哪里?

5 个答案:

答案 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.rightBarButtonItemnil,但是rightBarButtonItem被联系在IB中。

这可能有两个原因:

  1. 您尚未装入笔尖。 (从我对UIViewController的了解很少,这似乎不太可能。)
  2. navigationItemnavigationControllerselfnil
  3. 请记住,属性访问表达式实际上是消息表达式。如果self.navigationControllernil,那么发送navigationItem消息将返回nil。如果self.navigationController.navigationItemnilrightBarButtonItemnil,那么请求self self.navigationController

    检查每个子表达式 - self.navigationController.navigationItemnil和{{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];