Подтвердить что ты не робот

Как связать логическое значение с состоянием включения/выключения UISwitch?

У меня есть UISwitch, который я хочу контролировать логическое значение в функции, которую я написал. Я посмотрел в типе UISwitch Reference Type, и он перечислил свойство для включения/выключения этого переключателя как on. Я попытался использовать это в действии:

@IBAction func switchValueChanged(sender: UISwitch) {
        if acsessabilitySwitch.on {
//accessibilitySwitch is the UISwitch in question 
            println("It True!")
            advice.isInProduction = Bool (true) 
// isInProduction is a attribute of a class
        } else {
            println("It False!")
            advice.isInProduction = Bool (false)
        }

но когда я запустил его и нажал на переключатель, он разбился и ничего не печатал.

EDIT: Вот мой 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 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 " + 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.
    }


}
4b9b3361

Ответ 1

Добавьте ссылку UISwitch в файл 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/

Ответ 2

Краткость, даже скупость, важна в стиле кодирования. Попробуй это:

@IBAction func switchValueChanged (sender: UISwitch) {
  advice.isInProduction = sender.on
  print ("It \(advice.isInProduction)!")
}

В исходном коде вы, вероятно, потерпели крах, потому что acsessabilitySwitch или advice связаны (имеют значения nil).

[Обновлено - заменено println на print ]

Ответ 3

Для быстрой 3

enter image description here

@IBAction func switchValueChanged(_ sender: UISwitch) {
        print(sender.isOn)
}

Ответ 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")
    }

Ответ 5

Если вы пытаетесь изменить переключатель, вы можете использовать

mySwitch.on = true

установить его на "вкл" или

mySwitch.off == false

установить его на "выкл"

Или, если вы хотите получить значение, которое вы можете использовать

let myBool = mySwitch.on

Если коммутатор включен, значение будет истинным, в противном случае - ложным.

Вы также можете выполнить действие с именем valueChanged (чтобы получить или обновить значение при каждом изменении значения переключателя)

@IBAction func valueChanged(sender: AnyObject) {
    // some code
}

Вы можете сделать это, выбрав dualView... view и ctrl drag от вашего переключателя до контроллера view и выбрав action, а значение изменилось, если оно еще не выбрано.

Ответ 6

В Swift 3 есть шанс.

if mySwitch.on

to

if mySwitch.isOn

myprint

Ответ 7

Нет необходимости в дополнительных логических.
использовать этот:

if mySwitch.isOn {
  // do something
} else {
  // do something else
}

Это всегда актуальное логическое значение для состояния переключателя, поэтому НЕ НУЖНО создавать свою собственную переменную.