2015-11-18 2 views
0

У меня есть текстовое поле в калькуляторе подсказок. Я хочу, чтобы калькулятор подсказок обновил все поля моего калькулятора.Swift 2: вызов метода после нажатия Return в UITextField

С текущим кодом, который у меня есть, по любой причине. Он не вызывает calcTip() (или, по крайней мере, пока он не кажется) до тех пор, пока я не вернусь один раз, не введите другое (или то же) значение и не вернусь снова.

Я действительно близок к тому, что это приложение работает именно так, как я этого хочу, и мне кажется, что я всего в 1 или 2 строках.

My ViewController соответствует UITextFieldDelegate, и я объявил amountBeforeTaxTextField.delegate = self in viewDidLoad.

TextShouldReturn:

func textFieldShouldReturn(textField: UITextField) -> Bool { 
     amountBeforeTaxTextField.clearsOnBeginEditing = true 
     amountBeforeTaxTextField.becomeFirstResponder() 
     calcTip() 
     amountBeforeTaxTextField.resignFirstResponder() 
    return true 
} 

calcTip():

func calcTip() { 
    let tip = tipCalc.calculateTip() 
    let total = tipCalc.calculateTotal() 
    let tax = tipCalc.calculateTax() 
    let perPerson = total/Float(Int(partySizeSlider.value)) 

    tipCalc.tipPercentage = (tipPercentageSlider.value) 
    tipCalc.amountBeforeTax = (amountBeforeTaxTextField.text! as 
     NSString).floatValue 
    tipCalc.taxPercentage = (taxPercentageSlider.value) 
    resultLabel.text = String(format: "Tip $%.2f, Tax: $%.2f Total: $%.2f", tip, tax, total) 
    perPersonLabel.text = String(format: "Per-Person Total: $%.2f", perPerson) 
} 

Примечание: У меня есть один и тот же результат с & без .becomeFirstResponder()

Спасибо за чтение.

+3

В чем смысл вызовов 'getFirstResponder()' и 'resignFirstResponder()'? –

+1

@AaronBrager resignFirstResponder закрывает клавиатуру, когда вы нажимаете enter. Не уверен в том, чтобы стать. – TrickSpades

+1

Почему вы хотите, чтобы он стал 'startFesponder()' и 'resignFirstResponder()' сразу? не следует «resignFirstResponder()» после вычисления? move 'amountBeforeTaxTextField.resignFirstResponder()' в нижней части 'calcTip()' – Xrait

ответ

1

Итак, ваша функция textFieldShouldReturn вызывается, когда вы нажимаете нижнюю правую кнопку на клавиатуре, которая может иметь разные заголовки; такие как «Go», «Return», «Done» или «Send».

Ваша первая строка, только выполняет эффект пользовательского интерфейса; то есть, когда пользователь вводит текстовое поле для ввода текста, появится небольшая рамка, которая отображается в правой правой части текстового поля, которая позволяет пользователю очищать введенный текст, если таковой имеется. Похоже на сброс.

Когда вы используете startFirstResponder, вы в значительной степени вызываете другую клавиатуру, чтобы всплывать, так что вы ничего не делаете, делая это.

Когда вы используете resignFirstResponder, вы скрываете клавиатуру.

Что вы хотите сделать, так это удалить «startFirstResponder», а также первую строку, потому что они ничего не помогают, чтобы помочь вашей проблеме. Это должно быть решением проблемы, с которой вы сталкиваетесь.

+0

Я понимаю, что делает первая строка, но я не видел нигде, где бы я ни выразился. Спасибо, что сообщили мне о FirstResponder, потому что я не знал, что это делает, но даже с его удалением у меня все еще такая же проблема. Я должен ввести значение дважды, или два разных значения для меняющихся ярлыков. – TrickSpades

+0

Поместите эту строку кода в viewDidLoad(). Я хотел бы помочь, но вы не предоставили достаточно кода для меня, чтобы определить, в чем проблема. вы только даете мне немного для гораздо большей проблемы. – Jay

+0

Когда я положил его в viewDidLoad(), он просто сделал это так, что я не могу закрыть клавиатуру. Пока что показывать нечего. Мне нужно, чтобы мои метки обновлялись, как и предполагалось в calcTip. – TrickSpades

Смежные вопросы