如何在swift中使按钮成为IBOutlet和IBAction

如何在swift中使按钮成为IBOutlet和IBAction,swift,xcode,Swift,Xcode,我有一个按钮,我想禁用时,我的计时器结束在Xcode,但要禁用按钮,它需要是一个出口。然而,我需要它成为一个动作,因为它是一个重要的按钮 代码: 您可以使用与这些标签相同的方法来执行此操作 在ViewController中定义按钮 @IBOutlet weak var buttonOneOutlet: UIButton! 通过控制拖动,将故事板中的IBOutlet设置为该按钮 希望能有所帮助我想你把IBOutlet和IBAction搞混了 实际上,区别在于: “您需要为将在中使用的方法指定i

我有一个按钮,我想禁用时,我的计时器结束在Xcode,但要禁用按钮,它需要是一个出口。然而,我需要它成为一个动作,因为它是一个重要的按钮

代码:


您可以使用与这些标签相同的方法来执行此操作

  • 在ViewController中定义按钮

    @IBOutlet weak var buttonOneOutlet: UIButton!
    
  • 通过控制拖动,将故事板中的IBOutlet设置为该按钮


  • 希望能有所帮助

    我想你把IBOutletIBAction搞混了

    实际上,区别在于:

    “您需要为将在中使用的方法指定iAction 将在中使用的对象的界面生成器和IBOutlet 界面生成器“

    ()


    我稍微更改了您的代码,从
    buttoneoneoutlet
    IBOutlet)和
    buttonOne
    IBAction)开始

    我添加了一个名为
    buttonOne
    IBOutlet,并将您的IBActions重命名为
    buttonepothed
    startbuttonothed
    。您可以在Swift中找到一些有关命名约定的文档

    此外,我还添加了一个名为
    timerObject
    的变量,以便您可以保留对正在运行的计时器的引用,并在以后对其进行
    invalidate()。否则计时器将永远运行

    以下是更新的代码:

    import UIKit
    class ViewController: UIViewController {
    
        var count = 0
        var timer = 60
        var highScore = 0
        // new timer object declared here
        var timerObject = Timer()
    
        // new IBOutlet object declared here
        @IBOutlet weak var buttonOne: UIButton!
        @IBOutlet weak var output: UILabel!
        @IBOutlet weak var timerText: UILabel!
        @IBOutlet weak var scoreText: UILabel!
        @IBOutlet weak var highscoreText: UILabel!
    
        // renamed the function to 'buttonOneTouched' (it was 'buttonOne')
        @IBAction func buttonOneTouched(_ sender: Any) {
            count += 1
            output.text = String(count)
        }
    
        // renamed the function to 'startButtonTouched' (it was 'StartButton')
        @IBAction func startButtonTouched(_ sender: Any) {
            timerObject = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: Selector(("updateCounting")), userInfo: nil, repeats: true)
        }
    
        @objc func updateCounting() {
            if timer > 0 {
                timer -= 1
                timerText.text = String(timer)
            } else {
                // added step to invalidate the running timer loop
                timerObject.invalidate()
                // replaced 'buttonOneOutlet' with 'buttonOne'
                buttonOne.isEnabled = false
                timerText.text = "Time up!"
                scoreText.text = "Score: " + String(count)
                if count > highScore {
                    highScore = count
                    highscoreText.text = String(count)
                } else {
                    highscoreText.text = String(highScore)
                }
            }
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
        }
    }
    

    以下是您可以遵循的步骤-

    对于@IBOutlet

    1.在类名之后声明Interface builder元素属性,就像您已经为UIlabel声明的那样

    class ViewController: UIViewController{
        @IBOutlet weak var btnTest : UIButton! //Your Interface builder Element
    
    2.将IB元素从情节提要中挂钩

    对于@IBAction

    1.在类中编写一个方法(比如SomeViewController)

    2.从故事板钩住方法


    @oscarF123-请阅读并遵循以下链接1。2.这个按钮可以同时有一个
    @iAction
    和一个
    @IBOutlet
    ),但我也需要这个按钮作为一个动作?是的,你可以设置这两个东西,IBOutlet会给它标识,iAction在内部润色时会给它动作。但是我得到一个线程1:SIGABRT错误(也称为未连接或插座或动作有问题)尝试为所有变量设置出口并再次执行操作,可能会修复。
    class ViewController: UIViewController{
        @IBOutlet weak var btnTest : UIButton! //Your Interface builder Element
    
    @IBAction func didTapTestBtn(_sender : AnyObject){
    //write your code here.
    }