iOS/Swift: 如何实现后退按钮的长按动作?
iOS/Swift: How to implement longPressed action for backButton?
我正在尝试为我的应用中的每个 ViewController 实现一个 自定义后退按钮 。我希望它有两个动作。如果按钮 被点击 ,它应该正常运行并进入导航堆栈。如果按钮 按下的时间更长 ,它应该会转到预定义的 ViewController。
如何仅针对 swift 中的后退按钮实现此目的?
您可以隐藏默认导航后退按钮并通过这种方式添加自定义按钮:
import UIKit
class SViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//hide your default back button
navigationController!.setNavigationBarHidden(false, animated:true)
//create a new button
var myBackButton:UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
myBackButton.addTarget(self, action: "popToRoot:", forControlEvents: UIControlEvents.TouchUpInside)
myBackButton.setTitle("Back", forState: UIControlState.Normal)
myBackButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
myBackButton.sizeToFit()
//create a LongPressGestureRecognizer
var longPressGesture = UILongPressGestureRecognizer(target: self, action: "longPressAction:")
//add LongPressGestureRecognizer into button
myBackButton.addGestureRecognizer(longPressGesture)
var myCustomBackButtonItem:UIBarButtonItem = UIBarButtonItem(customView: myBackButton)
self.navigationItem.leftBarButtonItem = myCustomBackButtonItem
}
//this method will call when you tap on button.
func popToRoot(sender:UIBarButtonItem){
self.navigationController!.popToRootViewControllerAnimated(true)
}
//this method will call when you long press on button
func longPressAction(gestureRecognizer:UIGestureRecognizer) {
//initiate your specific viewController here.
println("Long press detected")
}
}
我正在尝试为我的应用中的每个 ViewController 实现一个 自定义后退按钮 。我希望它有两个动作。如果按钮 被点击 ,它应该正常运行并进入导航堆栈。如果按钮 按下的时间更长 ,它应该会转到预定义的 ViewController。
如何仅针对 swift 中的后退按钮实现此目的?
您可以隐藏默认导航后退按钮并通过这种方式添加自定义按钮:
import UIKit
class SViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//hide your default back button
navigationController!.setNavigationBarHidden(false, animated:true)
//create a new button
var myBackButton:UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
myBackButton.addTarget(self, action: "popToRoot:", forControlEvents: UIControlEvents.TouchUpInside)
myBackButton.setTitle("Back", forState: UIControlState.Normal)
myBackButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
myBackButton.sizeToFit()
//create a LongPressGestureRecognizer
var longPressGesture = UILongPressGestureRecognizer(target: self, action: "longPressAction:")
//add LongPressGestureRecognizer into button
myBackButton.addGestureRecognizer(longPressGesture)
var myCustomBackButtonItem:UIBarButtonItem = UIBarButtonItem(customView: myBackButton)
self.navigationItem.leftBarButtonItem = myCustomBackButtonItem
}
//this method will call when you tap on button.
func popToRoot(sender:UIBarButtonItem){
self.navigationController!.popToRootViewControllerAnimated(true)
}
//this method will call when you long press on button
func longPressAction(gestureRecognizer:UIGestureRecognizer) {
//initiate your specific viewController here.
println("Long press detected")
}
}