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