如何给 barbuttonitem 动作?

Posted

技术标签:

【中文标题】如何给 barbuttonitem 动作?【英文标题】:How to give barbuttonitem action? 【发布时间】:2012-08-01 18:37:48 【问题描述】:

当在我的 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 中调出一个 nib。你会怎么做?

有人告诉我,要使其正常运行,我必须添加 [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 (return type defaults to 'id')"

除了我在这里编写的代码之外,请告诉我解决方案,而不是只显示正确的添加剂。

【问题讨论】:

【参考方案1】:

如果您使用的是 XCode 4,您只需 Ctrl+拖动BarButtonItem 到您的 .h 文件,您就可以从那里自动创建一个 IB Action。

【讨论】:

我以编程方式制作了 barbuttonitem,因为它所在的工具栏是以编程方式制作的,因此使用 IB 不可行。【参考方案2】:

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

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

注意,没有forControlEvents:

【讨论】:

那么,如果 void 方法即使在我按照您的建议进行了纠正后也没有执行切换到新视图,我应该怀疑什么呢? 首先,设置一个断点,看看是否正在调用该方法。另外:[self presentViewController: tableView animated:YES completion:nil];【参考方案3】:

试试这些改变:

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

-(void)doneButtonPressed:(id)sender


向目标传递启动操作的对象(即 UIBarButtonItem 本身)

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

【讨论】:

以上是关于如何给 barbuttonitem 动作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在苹果电视的导航栏的 BarButtonItem 上移动焦点?

如何测试 BarButtonItem 是不是连接到正确的 IBAction?

如何将全局 barButtonItems 添加到自定义 UINavigationBar?

如何在 iOS 5.1 的 uiSplitViewController 中设置 barButtonItems?

如何在 swift 3 中以编程方式为 barButtonItem 设置操作?

如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作