如何给barbuttonitem行动?

时间:2012-08-01 18:37:49

标签: ios

当我在UIToolBar上单击完成按钮时,我想调出“TableViewController”的.nib。但下面不允许点击显示新视图。我该如何纠正这个?请告诉我哪里出错了,应该更换什么以及为什么。

//Here's the selector in my overlay. 
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)];

//Here's how I made my action. Btw, the uitoolbar has no nib, it's an overlay on the
//(camera mode).

-(void)doneButtonPressed {
TableViewController *tableView = [[TableViewController alloc]
initWithNibName:@"TableViewController" bundle:nil];
tableView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:tableView animated:YES];
}


//Yet nothing happens when I click on my done button on my overlay. And I've made sure
//   i've imported .h frameworks correctly too.

假设您要从UItoolbar叠加层上的barbuttonitem中调出一个笔尖。你会怎么做?

我被告知要使其正常运行,我必须添加[barButtonItem addTarget:self action:@selector(doneButtonPressed)forControlEvents:UIControlEventTouchUpInside]; 。

但如果我添加它,我会得到这个:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemDone addTarget:self action:@selector(doneButtonPressed)
forControlEvents:UIControlEventTouchUpInside];

导致我在读取“实例方法”时出错 - initWithBarButtonSystemItem:target:action:forControlEvents:'not found(返回类型默认为'id')“

除了向我展示正确的添加剂外,请向我展示除了我在此处编写的代码之外的解决方案。

3 个答案:

答案 0 :(得分:5)

如果你正在使用XCode 4,你只需按Ctrl +拖动BarButtonItem到你的.h文件,你就可以自动创建一个IB动作。

答案 1 :(得分:1)

UIBarButtonItem遵循默认UIControlEventTouchUpInside,您无法设置它。 Xcode应该自动建议分配它的方法,但正确的代码是:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)];

注意,没有forControlEvents:

答案 2 :(得分:1)

尝试以下更改:

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];

-(void)doneButtonPressed:(id)sender
{
}

目标被传递给发起动作的对象(即UIBarButtonItem本身)

其次,在doneButtonPressed函数中设置断点。例如,如果tableView设置为nil,那么你将看不到任何结果。即,实例化此视图控制器可能存在问题。