我有一个UISwitch
,我想在我写的函数中控制一个布尔值。我查看了UISwitch
类型参考,它将交换机的开/关状态的属性列为on
。我尝试在动作中使用它:
@IBAction func switchValueChanged(sender: UISwitch) {
if acsessabilitySwitch.on {
//accessibilitySwitch is the UISwitch in question
println("It's True!")
advice.isInProduction = Bool (true)
// isInProduction is a attribute of a class
} else {
println("It's False!")
advice.isInProduction = Bool (false)
}
但是当我跑到它并按下开关时它崩溃了,没有打印任何东西。
编辑: 这是我的ViewController和我的自定义类文件:
BuyingAdviceModel.swift:
import Foundation
class videoGameModel{
var price : Double
var isInProduction : Bool
var adviceGiven: String?
init (isInProduction : Bool, price: Double){
self.price = price
self.isInProduction = isInProduction
}
func giveAdvice (price:Double, isInProduction:Bool)->(adviceGiven:String){
if price >= 199.99 {
var adviceGiven = "Nope, that's too expensive!"
return adviceGiven
} else if price <= 99.99{
if isInProduction == true {
var adviceGiven = ("Buy it at GameStop!")
return adviceGiven
} else {
var adviceGiven = ("Go look online!")
return adviceGiven
}
} else {
var adviceGiven = ("Are you sure you put the info in correctly?")
return adviceGiven
}
}
}
ViewController.swift:
import UIKit
import Foundation
class ViewController: UIViewController {
@IBOutlet var priceTextField: UITextField
@IBAction func adviceButtonTapped(sender: AnyObject) {
let adviceOutputed = advice.adviceGiven!
adviceLabel.text=adviceOutputed
}
@IBAction func viewTapped(sender: AnyObject) {
priceTextField.resignFirstResponder()
}
@IBOutlet var acsessabilitySwitch: UISwitch
@IBOutlet var adviceLabel: UILabel
@IBAction func switchValueChanged (sender: UISwitch) {
advice.isInProduction = sender.on
println ("It's " + advice.isInProduction.description + "!")
}
var advice = videoGameModel (isInProduction: true,price: 0.00)
func refreshUI(){
priceTextField.text = String(advice.price)
adviceLabel.text = ""
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
refreshUI()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:41)
将UISwitch Reference添加到ViewController.swift文件中。
@IBOutlet var mySwitch: UISwitch
@IBOutlet var switchState: UILabel
然后将目标事件添加到viewdidload方法中,如下所示
mySwitch.addTarget(self, action: #selector(ViewController.switchIsChanged(_:)), forControlEvents: UIControlEvents.ValueChanged)
当翻转开关时,会触发UIControlEventValueChanged事件并调用stateChanged方法。
func switchIsChanged(mySwitch: UISwitch) {
if mySwitch.on {
switchState.text = "UISwitch is ON"
} else {
switchState.text = "UISwitch is OFF"
}
}
Swift 3.0
func switchIsChanged(mySwitch: UISwitch) {
if mySwitch.isOn {
switchState.text = "UISwitch is ON"
} else {
switchState.text = "UISwitch is OFF"
}
}
Swift 4.0
@objc func switchIsChanged(mySwitch: UISwitch) {
if mySwitch.isOn {
switchState.text = "UISwitch is ON"
} else {
switchState.text = "UISwitch is OFF"
}
}
在http://sourcefreeze.com/uiswitch-tutorial-using-swift-in-ios8/
中找到简要教程答案 1 :(得分:18)
简洁,即使是简约,在编码风格中也很重要。试试这个:
@IBAction func switchValueChanged (sender: UISwitch) {
advice.isInProduction = sender.on
print ("It's \(advice.isInProduction)!")
}
在原始代码中,由于acsessabilitySwitch
或advice
未绑定(值为nil
),您可能会崩溃。
[已更新 - 已将println
替换为print
]
答案 2 :(得分:5)
答案 3 :(得分:4)
从对象库中拖放UISwitch -
@IBOutlet -
@IBOutlet weak var myswitch: UISwitch!
@IBAction -
@IBAction func onAllAccessory(sender: UISwitch) {
if myswitch.on == true{
onCall()
}
if myswitch.on == false{
offCall()
}
}
你的功能 -
func onCall(){
print("On is calling")
}
func offCall(){
print("Off is calling")
}
答案 4 :(得分:2)
如果您尝试更改开关,可以使用
mySwitch.on = true
将其设置为“on” 或
mySwitch.off == false
将其设为“关闭”
或者,如果您想获得可以使用的值
let myBool = mySwitch.on
如果开关已接通电源,则该值为true,否则为false。
您还可以创建一个名为valueChanged的操作(每当更改切换值时获取或更新值)
@IBAction func valueChanged(sender: AnyObject) {
// some code
}
您可以通过选择双视图...视图并按住Ctrl键从您的开关拖动到您查看控制器并选择操作,如果尚未选择该值,则更改值。
答案 5 :(得分:2)
答案 6 :(得分:1)
不需要多余的布尔值。
使用这个:
if mySwitch.isOn {
// do something
} else {
// do something else
}
这是开关状态的始终为最新的布尔值,因此不需要可以创建自己的变量。