Как я могу изменить значение UIStepper при изменении из UITextField?

Я очень новичок во всем этом, и я нашел код, который помог мне понять часть этого синтаксиса. Я пытаюсь создать текстовое поле, которое позволяет мне вводить значение, которое обновляет значение степпера. В настоящее время степпер работает (обновляет поле uitext), но когда я изменяю значение в текстовом поле, он не обновляет значение степпера, поэтому, когда я нажимаю на степпер, он возвращается к тому значению, которое было до того, как я ввел значение. .. Может ли кто-нибудь сказать мне, почему две функции STracksValueDidChange и CTrackValueDidChange имеют ошибки?

Вот мой код:

import UIKit

класс ViewController: UIViewController {

@IBOutlet weak var STracks: UITextField!
@IBOutlet weak var STracksStepper: UIStepper!
@IBOutlet weak var CTracks: UITextField!
@IBOutlet weak var CTrackStepper: UIStepper!



override func viewDidLoad() {
    super.viewDidLoad()


    STracksStepper.autorepeat = true
    STracksStepper.maximumValue = 100.0
    STracksStepper.minimumValue = 2.0
    STracksStepper.stepValue = 2.0
    print(STracksStepper.value)
    STracks.text = "\(Int(STracksStepper.value))"
    STracksStepper.addTarget(self, action: "SstepperValueDidChange:", forControlEvents: .ValueChanged)
    STracks.addTarget(self, action: "STextValueDidChange:", forControlEvents: .ValueChanged)


    CTrackStepper.autorepeat = true
    CTrackStepper.maximumValue = 100.0
    CTrackStepper.minimumValue = 2.0
    CTrackStepper.stepValue = 2.0
    print(CTrackStepper.value)
    CTracks.text = "\(Int(CTrackStepper.value))"
    CTrackStepper.addTarget(self, action: "CstepperValueDidChange:", forControlEvents: .ValueChanged)
    CTracks.addTarget(self, action: "CTextValueDidChange:", forControlEvents: .ValueChanged)

}

//Steppers will update UITextFields
func SstepperValueDidChange(stepper: UIStepper) {

    let stepperMapping: [UIStepper: UITextField] = [STracksStepper: STracks]

    stepperMapping[stepper]!.text = "\(Int(stepper.value))"
}

func STracksValueDidChange(SText: UITextField) {

    let STextMapping: [UITextField: UIStepper] = [STracks: STracksStepper]

    STextMapping[SText]!.value = "(SText.text)"
}


func CstepperValueDidChange(stepper: UIStepper) {

    let stepperMapping: [UIStepper: UITextField] = [CTrackStepper: CTracks]

    stepperMapping[stepper]!.text = "\(Int(stepper.value))"
}


func CTrackValueDidChange(CText: UITextField) {

    let CTextMapping: [UITextField: UIStepper] = [CTracks: CTrackStepper]

    CTextMapping[CText]!.value = "(CText.text)"
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}


person Erik    schedule 13.03.2016    source источник
comment
Насколько я понимаю, вы хотите, чтобы обновления шли в обе стороны.   -  person ryantxr    schedule 14.03.2016
comment
Да, в обе стороны...   -  person Erik    schedule 14.03.2016


Ответы (1)


Попробуйте что-нибудь вроде этого.

CTrackStepper.value = Double(Textfield.text)

Я не совсем уверен, какое сопоставление в вашем коде.
Но я не думаю, что вам это нужно для изменения значения.

Обновление, сделал проект самостоятельно:

 import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textfield: UITextField!
    @IBOutlet weak var stepper: UIStepper!


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func stepperValueChanged(sender: UIStepper) {
        textfield.text = String(sender.value)
    }

    @IBAction func valueChanged(sender: UITextField) {
        if Double(sender.text!) != nil {
            stepper.value = Double(sender.text!)!
        }
    }
}

Для steppervaluechanged и valuechanged просто перетащите из uistepper и текстового поля, выберите действие и измените Anyobject на UStepper поля Uitextfield.

Удачи :)

person Cing    schedule 13.03.2016
comment
Эта ссылка вызывает две ошибки: Значение необязательного типа «Двойной?» не развернутый, вы хотели использовать ! или ? и значение необязательного типа 'String?' не развернутый, вы хотели использовать ! или ? - person Erik; 14.03.2016
comment
CTrackStepper сопоставляется с CTracks UITextField... есть ли способ сопоставить его так, чтобы значения изменялись в обоих направлениях? - person Erik; 14.03.2016
comment
Никогда не слышал о картографии. Но я пошел попробовать выше - person Cing; 14.03.2016