两次引发 iOS Storyboard事件 (SWIFT)

标签 ios swift

我正在开发一个基本的 iOS 应用程序,作为学习 SWIFT 的一种方式(我来自 .NET 背景),并且遇到了一个问题,即我的按钮的点击方法被调用两次以进行一次触摸。

Storyboard中按钮的定义是:

<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: "TryLogin:", forControlEvents: UIControlEvents.TouchUpInside)

在任何一种情况下都会适本地调用该方法 - 但每次“点击”它总是被调用两次。当我调试它时,第二个事件通常在第一次执行的一半左右引发。这是在运行 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
        }
    }
}

任何帮助或指点都将不胜感激,因为我已经在这个问题上绕了一段时间了。

谢谢。

最佳答案

尝试向同一个 View 添加另一个按钮,但需要另一个 IBAction 回调

关于两次引发 iOS Storyboard事件 (SWIFT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29050801/

相关文章:

ios - iOS应用程序不适合iPhone 5屏幕

swift - 使用 for 循环迭代核心数据?

swift - 如何选择 Collection View 单元格来快速放大图像?

ios - swift 。正确初始化 UITableViewCell 层次结构

ios - Core Data 根据关系是否存在对描述符进行排序?

当我构建并运行应用程序时,iPhone 模拟器屏幕是黑色的

ios - 在 Swift 4 IOS 中获取 XML 数据到 String

ios - 如何在 Release模式下启用框架的可测试性?

swift - 如何在 UIAlertController 中添加 UIPickerView?

ios - 在 uiwebview 中单击 html 按钮时不会调用 shouldStartLoadWithRequest