iOS故事板活动被提升两次(SWIFT)

时间:2015-03-14 15:42:42

标签: ios swift

我正在开发一个基本的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
        }
    }
}

任何帮助或指示都会受到赞赏,因为我已经对此进行了一段时间的讨论。

感谢。

1 个答案:

答案 0 :(得分:1)

尝试向同一视图添加另一个按钮,但是对于另一个IBAction回调