Ton*_*hen 1 selector uibarbuttonitem swift
我有一个嵌入导航控制器的MainViewController,如下所示:
在MainViewController.swift中,我以编程方式添加了两个UIBarButtonItem(左和右):
class MainViewController: UIViewController {
let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(onRightClick))
let leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(onLeftClick))
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = rightButton
navigationItem.leftBarButtonItem = leftButton
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@objc func onRightClick() {
print("[Main] Right Click")
}
@objc func onLeftClick() {
print("[Main] Left Click")
}
}
Run Code Online (Sandbox Code Playgroud)
按钮确实显示在屏幕上,但有趣的是,选择器功能onLeftClick
,onRightClick
每当我按下向左或向右按钮时都不会被调用.我有什么办法让它有效吗?我正在使用Xcode 9.3.
您也可以只将lazy
关键字添加到 rightButton 和 leftButton 类属性中。这样,UIBarButtonItem
在类内部使用它们之前,它们不会被实例化(并且不会尝试解析动作选择器)。这样做允许您在类中的任何位置使用 barButtonItems(不仅仅是在它们声明的函数中)。
lazy var rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(onRightClick))
lazy var leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(onLeftClick))
Run Code Online (Sandbox Code Playgroud)
尝试使用内部范围一次
override func viewDidLoad() {
super.viewDidLoad()
let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(self.onRightLeftClick(_ :)))
rightButton.tag = 1
let leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(self.onRightLeftClick(_ :)))
rightButton.tag = 2
self.navigationItem.rightBarButtonItem = rightButton
self.navigationItem.leftBarButtonItem = leftButton
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1303 次 |
最近记录: |