如何给 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?