【发布时间】:2017-12-27 08:30:03
【问题描述】:
我是 Swift 3 的新手。目前,我有一个 UIBarButtonItem。如何使此按钮动作仅在多次按下时才触发?例如,只有当用户按下此按钮两次时才会出现 ViewController。
【问题讨论】:
-
将 UITapGestureRecognizer 添加到您的 UIBarButtonItem
我是 Swift 3 的新手。目前,我有一个 UIBarButtonItem。如何使此按钮动作仅在多次按下时才触发?例如,只有当用户按下此按钮两次时才会出现 ViewController。
【问题讨论】:
为UIBarButtonItem创建自定义视图并为自定义视图添加UITapGestureRecognizer并将numberOfTapsRequired属性值设置为2
示例代码:
class viewController: UIViewController {
var doubleTapGesture: UITapGestureRecognizer!
var barButton: UIBarButtonItem!
var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button = UIButton(type: .custom)
button.setTitle("title", for: .normal)
button.frame = CGRect(x: 0, y: 0, width: 64, height: 30)
doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(viewController.buttonClicked))
doubleTapGesture.numberOfTapsRequired = 2
button.addGestureRecognizer(doubleTapGesture)
barButton = UIBarButtonItem(customView: button);
navigationItem.rightBarButtonItem = barButton
}
func buttonClicked() {
// Method for UITapGestureRecognizer
}
}
【讨论】:
只需添加 UITapGestureRecognizer 到您的 UIBarButtonItem 如下所示。
func addBarButton() -> UIBarButtonItem
{
let btnImage = UIImage(named: "imageName")!
let imageButton : UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
imageButton.setBackgroundImage(btnImage, for: UIControlState())
let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.buttonAction(_:)))
doubleTap.numberOfTapsRequired = 2
imageButton.addGestureRecognizer(doubleTap)
return UIBarButtonItem(customView: imageButton)
}
从您的 viewDidLoad 函数中调用下面的代码。
navigationItem.rightBarButtonItems = [addBarButton()]
【讨论】: