以下是一段无效的代码:
class Person {
static fun addBtn(cName:UIViewController)
{
let rightBtn = UIBarButtonItem.init(title: "Right", style: .Plain, target: UIBarButtonItem.self, action:#selector(UIBarButtonItem.self.newMenuTapped(_:)))
cName.navigationItem.rightBarButtonItem = rightBtn
}
}
extension UIBarButtonItem
{
func newMenuTapped(sender: UIBarButtonItem)
{
print("Tapped")
}
}
崩溃时出现此错误:
由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:发送到无法识别的选择器 class 0x14c830
有人可以指导我做错了什么吗?感谢。
答案 0 :(得分:3)
为此UIViewController
创建一个扩展程序:
extension UIViewController {
func addButton() {
let button = UIBarButtonItem(title: "Right", style: .Plain, target: self, action: #selector(self.rightButtonPressed(_:)))
self.navigationItem.setRightBarButtonItem(button, animated: false)
}
func rightButtonPressed(sender: UIBarButtonItem) {
print("tapped")
}
}
在要实现按钮的所有视图控制器中调用self.addButton()
。
答案 1 :(得分:2)
一个简单的解决方案是创建BaseViewController
的子UIViewController
。
创建一个添加导航栏和导航栏项的简单方法。
将此BaseViewcontroller
设置为您想要类似功能的所有视图的超类。
答案 2 :(得分:1)
感谢。 @xoudini
以下是我的代码出了什么问题: -
class Person
{
static func addBtn(cName: UIViewController)
{
let rightBtn = UIBarButtonItem(title: "RightView", style: .Plain, target: UIBarButtonItem(), action: #selector(UIBarButtonItem.newMenuTapped(_:)))
cName.navigationItem.rightBarButtonItem = rightBtn
}
}
extension UIBarButtonItem {
func newMenuTapped(sender: UIBarButtonItem)
{
print("Tapped 3")
}
}
答案 3 :(得分:0)
创建UIViewController的扩展,并将此代码段放在其中。
extension UIViewController
{
func addRightBarButtonItem()
{
var btn = UIBarButtonItem(
title: "Right",
style: .Plain,
target: self,
action: #selector(newMenuTapped(_:))
)
self.navigationItem.setRightBarButtonItem(btn, animated: false)
}
func newMenuTapped(sender: UIBarButtonItem)
{
}
}