【发布时间】:2017-02-17 22:40:33
【问题描述】:
我要做的就是在我长时间触摸时在当前上下文中调用新控制器(UILongPressGestureRecognizer)。 代码如下:
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!{
didSet{
button.addGestureRecognizer(UILongPressGestureRecognizer(target: self,
action: #selector(settingTheButton(_:))))
}
}
func settingTheButton(_ recognizer: UILongPressGestureRecognizer){
print("touchTheColorButton was called") // here the method invokes twice
if let button = recognizer.view as? UIButton{
performSegue(withIdentifier: "setTheButtonColor", sender: button)
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if segue.identifier == "setTheButtonColor", let vc = segue.destination as? SettingsForButtonVC, let senderButton = sender as? UIButton {
vc.button = senderButton
}
}
}
我不明白。为什么方法 settingTheButton 被调用了两次?它不会干扰或损害程序,但它确实让我感到不安。
控制台: touchTheColorButton 被调用 touchTheColorButton 被调用 2017-02-18 01:28:12.499552 测试[1042:223223] 警告:尝试展示已经展示的对象
【问题讨论】:
-
将 segue 的发件人更改为自己,并删除您的 prepareForSegue 方法的按钮。