Ios 需要在所有VCs中添加通用UIBarbuttonite
以下是一段不起作用的代码:Ios 需要在所有VCs中添加通用UIBarbuttonite,ios,swift,swift2,Ios,Swift,Swift2,以下是一段不起作用的代码: class Person { static fun addBtn(cName:UIViewController) { let rightBtn = UIBarButtonItem.init(title: "Right", style: .Plain, target: UIBarButtonItem.self, action:#selector(UIBarButtonItem.self.newMenuTapped(
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”,原因:无法识别的选择器已发送到
类0x14c830
有人能告诉我我做错了什么吗?谢谢。创建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)
{
}
}
创建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)
{
}
}
一个简单的解决方案是创建一个BaseViewController,它是UIViewController的子类 创建一个简单的方法来添加导航栏和导航栏项。
使此BaseViewcontroller成为所有视图的超类,在这些视图中您需要类似的功能。一个简单的解决方案是创建一个BaseViewcontroller,UIViewController的子类 创建一个简单的方法来添加导航栏和导航栏项。 将此BaseViewcontroller设置为所有视图的超类,您需要类似的功能。为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。为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。谢谢@索迪尼
以下是我的代码的错误:-
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")
}
}
谢谢@索迪尼
以下是我的代码的错误:-
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")
}
}
在BaseViewController中使用此功能,将适用于所有用户viewcontroller@MeetShah是的,按照Dev说的做。虽然这段代码片段可能会解决这个问题,但包括一个解释确实有助于提高您的文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性!在BaseViewController中使用此功能,将适用于所有用户viewcontroller@MeetShah是的,按照Dev说的做。虽然这段代码片段可能会解决这个问题,但包括一个解释确实有助于提高您的文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性!