2015-09-27 2 views
0

У меня есть экран с текстовым полем.Передача введенного пользователем текста в следующий раздел

Когда пользователь вводит текст в это текстовое поле и удаляет текстовое поле, происходит переход.

Текст ярлыка следующего экрана должен быть изменен на текст, введенный пользователем в предыдущем.

class ViewController: UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var inputField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     inputField.delegate = self 

     let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard") 
     view.addGestureRecognizer(tap) 
    } 

    func dismissKeyboard() { 
     inputField.resignFirstResponder() 
    } 

    func textFieldDidEndEditing(inputField: UITextField) { 
     let info = inputField.text 
     print(info) 
     performSegueWithIdentifier("goToBlue", sender: info) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "goToBlue" { 
      if let blueVC = segue.destinationViewController as? BlueViewController { 
       if let sentValue = sender as? String { 
        blueVC.receptacle = sentValue 
       } 
      } 
     } 
    } 
} 

print(info) заявление ничего

не печатает Однако, SEGUE работает, но метка отображается ничего.

Очевидно, что это связано с сроками ... любыми идеями?

+0

Вы пытались поставить контрольную точку на линии, где вы установить blueVC.receptacle, чтобы убедиться, что код путь на самом деле попал? –

+0

@HugoTunius У меня нет, однако даже оператор 'print (info)' ничего не печатает –

+0

Вы задаете делегат текстового поля из раскадровки? Если нет, вы должны добавить 'inputField.delegate = self' в viewDidLoad –

ответ

0

Функция viewWillAppear работает в первую очередь, и в это время ваша переменная емкости не установлена ​​или ваша метка не инициализируется. Попробуй это;

@IBOutlet weak var blueText: UILabel! { didSet { blueText.text = receptacle } } 

var receptacle: String? { didSet { blueText.text = receptacle } } 
+0

Это кажется слишком сложным для того, что я пытаюсь сделать. Есть ли другой способ? –

+0

это правильный путь. Но если вы хотите, вы можете поместить свой код blueText.text = receptacle в функцию viewDidLoad. переопределение функ viewDidLoad() { super.viewDidLoad() blueText.text = сосуд } – emresancaktar

+0

Да, что не работает –

0

Изменить

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    blueText.text = receptacle 
} 

в

override func viewDidLoad() { 
    super.viewDidLoad() 
    blueText.text = receptacle 
} 
+0

haha ​​Я буквально ПРОСТО ПРОШЕЛ. Не работает –

+0

Вы не можете передавать информацию в качестве отправителя, ну вы можете, но он не работает. Я дал вам ответ выше, проверьте его – Lukas

+0

Я подозревал столько же, но я не был уверен. Упрощенный ответ, так как это лучшее решение –

0

Вот очень простой способ сделать это (FYI, если вк с inputTextfield является поповер, вы можете просто позвонить dismissViewController на представление vc)

func textFieldDidEndEditing(inputField: UITextField) { 
     textField.resignFirstResponder() 
     let info = inputField.text 
     print(info) 
     performSegueWithIdentifier("goToBlue", sender: info) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "goToBlue" { 
      if let blueVC = segue.destinationViewController as? BlueViewController { 
       blueVC.receptacle = self.inputField.text 
      } 
     } 
    } 
+0

Но это не то, что я хочу. Я хочу, чтобы событие произошло, когда пользователь удалился из текстового поля. –

+0

Ну, вы можете использовать ту же структуру в textFieldEndEditing. Кстати, все еще не работает? (Я отредактировал мой ответ) – Lukas

+0

Да, он все еще не работает @Lukas –

0

Не используйте sender, чтобы передать свое значение. sender полезен только для проверки того, какой элемент начал сеанс, но не для передачи данных. Просто сделайте info как класс переменной и передать значение так:

var info:String! 

func textFieldDidEndEditing(inputField: UITextField) { 
    info = inputField.text 
    print(info) 
    performSegueWithIdentifier("goToBlue", sender: info) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "goToBlue" { 
     if let blueVC = segue.destinationViewController as? BlueViewController { 
      blueVC.receptacle = info 
     } 
    } 
} 
+0

Это сбой моего приложения «неожиданно найдено nil (...) необязательное значение' :( –

+0

Кроме того, я хотел бы понять, почему мой код не работает –

+0

Где он падает? На какой строке? – Christian

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