我正在开发一个基本的iOS应用程序,作为学习SWIFT的一种方式(我来自.NET背景),并遇到了一个问题,我的按钮的点击方法被调用了两次单触。
故事板中按钮的定义是:
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gd0-8i-21X">
<rect key="frame" x="168" y="408" width="264" height="30"/>
<state key="normal" title="Login">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="TryLogin:" destination="2H8-Z2-w9l" eventType="touchUpInside" id="Gdv-wK-xhp"/>
</connections>
</button>
附加到事件的方法是:
@IBAction func TryLogin(sender: AnyObject) {
if (!_LoggingIn) {
_LoggingIn = true
// Login user through a web-service.
_LoggingIn = false
}
}
我有其他代码可以记录用户,并有条件地执行segue,但为了简单起见,我已将其删除(无论如何都会调用该方法两次)。
我尝试删除View Controller并从头开始重建,通过为按钮和以下代码创建IBOutlet,以编程方式将事件处理程序附加到按钮对象:
.addTarget(self,action:&#34; TryLogin:&#34;,forControlEvents:UIControlEvents.TouchUpInside)
在任何一种情况下都适当地调用该方法 - 但是每次点击&#39;它总是被调用两次。当我通过它进行调试时,第二个事件通常在第一次执行的中途提出。这是在运行iOS 8.1.3的iPad Mini 2上。当我使用IBOutlet时,我非常小心地删除了附加按钮的设计器代码,相反,在我使用设计器时删除了IBOutlet。
这是我使用的IBOutlet方法的一个例子:
class LoginController: UIViewController {
@IBOutlet weak var _UserName: UITextField!
@IBOutlet weak var _Password: UITextField!
@IBOutlet weak var _Login: UIButton!
private var _LoggingIn: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
_Password.secureTextEntry = true;
_Login.addTarget(self, action: "TryLogin:", forControlEvents: UIControlEvents.TouchUpInside)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func TryLogin(sender: AnyObject) {
if (!_LoggingIn) {
_LoggingIn = true
// Do login work.
_LoggingIn = false
}
}
}
任何帮助或指示都会受到赞赏,因为我已经对此进行了一段时间的讨论。
感谢。
答案 0 :(得分:1)
尝试向同一视图添加另一个按钮,但是对于另一个IBAction回调