Проблема с отправкой данных из TextField из всплывающего окна xib UIView обратно в ViewController. ⇐ IOS
Проблема с отправкой данных из TextField из всплывающего окна xib UIView обратно в ViewController.
У меня возникли проблемы с получением данных из вводимых пользователем данных во всплывающем окне UIView. Я в замешательстве, потому что функция TextFieldDelegate печатает ноль при попытке печати (делегат), но завершается успешно с помощью печати (имя), а кнопка сохранения печатает "" при попытке печати (имя), но завершается успешно с печатью (делегат).
Мне нужно вернуть переменную имени в ViewController.
Файл ViewController:
класс ViewController: UIViewController { вар popUp: PopUp? переопределить функцию viewDidLoad() { супер.viewDidLoad() } } расширение ViewController: PopUpDelegate { func saveName (_ имя: строка) { print(name) // попытка печати для тестирования } @IBAction func popUpButton (_ отправитель: UIButton) { self.popUp = PopUp(frame: self.view.frame, отправитель: self) self.view.addSubview(всплывающее окно!) } } Файл всплывающего окна:
класс PopUp: UIView { @IBOutlet слабая переменная textOutlet: UITextField! делегат вар: PopUpDelegate? имя вар = "" переопределить функцию awakeFromNib() { супер.awakeFromNib() textOutlet.delegate = сам } требуется инициализация?(кодер: NSCoder) { super.init(кодер: кодер) } init (кадр: CGRect, отправитель: PopUpDelegate) { super.init(кадр:кадр) xibSetup(frame: CGRect(x: 0, y: 0, ширина:frame.width, высота:frame.height)) self.delegate = отправитель } func xibSetup(frame: CGRect) { пусть просмотр = loadXib() view.frame = кадр addSubview (просмотр) } func loadXib() -> UIView { let Bundle = Bundle(для: type(of: self)) let nib = UINib (nibName: «PopUp», Bundle: Bundle) let view = nib.instantiate(withOwner: self, options: nil). Сначала как? UIView вернуть вид! } @IBAction func cancelButton (_ отправитель: UIButton) { self.removeFromSuperview() } @IBAction func saveButton (_ отправитель: UIButton) print(delegate) // печатает ViewController print(имя) // печатает "" делегат?.saveName(name) // печатает "" self.removeFromSuperview() } } расширение PopUp: UITextFieldDelegate { func textFieldShouldReturn (_ textField: UITextField) -> Bool { если textField.text != "" { textField.endEditing(истина) вернуть истину } еще { textField.placeholder = "требуется имя*" } вернуть истину } func textFieldDidEndEditing (_ textField: UITextField) { если textField.text != "" { имя = текстовое поле.текст! print(delegate) // печатает ноль print(name) // печатает введенный текст делегат?.saveName(name) // никаких действий } еще { textField.placeholder = "требуется имя*" } } } протокол PopUpDelegate { func saveName (_ имя: строка) } Помощь приветствуется!
У меня возникли проблемы с получением данных из вводимых пользователем данных во всплывающем окне UIView. Я в замешательстве, потому что функция TextFieldDelegate печатает ноль при попытке печати (делегат), но завершается успешно с помощью печати (имя), а кнопка сохранения печатает "" при попытке печати (имя), но завершается успешно с печатью (делегат).
Мне нужно вернуть переменную имени в ViewController.
Файл ViewController:
класс ViewController: UIViewController { вар popUp: PopUp? переопределить функцию viewDidLoad() { супер.viewDidLoad() } } расширение ViewController: PopUpDelegate { func saveName (_ имя: строка) { print(name) // попытка печати для тестирования } @IBAction func popUpButton (_ отправитель: UIButton) { self.popUp = PopUp(frame: self.view.frame, отправитель: self) self.view.addSubview(всплывающее окно!) } } Файл всплывающего окна:
класс PopUp: UIView { @IBOutlet слабая переменная textOutlet: UITextField! делегат вар: PopUpDelegate? имя вар = "" переопределить функцию awakeFromNib() { супер.awakeFromNib() textOutlet.delegate = сам } требуется инициализация?(кодер: NSCoder) { super.init(кодер: кодер) } init (кадр: CGRect, отправитель: PopUpDelegate) { super.init(кадр:кадр) xibSetup(frame: CGRect(x: 0, y: 0, ширина:frame.width, высота:frame.height)) self.delegate = отправитель } func xibSetup(frame: CGRect) { пусть просмотр = loadXib() view.frame = кадр addSubview (просмотр) } func loadXib() -> UIView { let Bundle = Bundle(для: type(of: self)) let nib = UINib (nibName: «PopUp», Bundle: Bundle) let view = nib.instantiate(withOwner: self, options: nil). Сначала как? UIView вернуть вид! } @IBAction func cancelButton (_ отправитель: UIButton) { self.removeFromSuperview() } @IBAction func saveButton (_ отправитель: UIButton) print(delegate) // печатает ViewController print(имя) // печатает "" делегат?.saveName(name) // печатает "" self.removeFromSuperview() } } расширение PopUp: UITextFieldDelegate { func textFieldShouldReturn (_ textField: UITextField) -> Bool { если textField.text != "" { textField.endEditing(истина) вернуть истину } еще { textField.placeholder = "требуется имя*" } вернуть истину } func textFieldDidEndEditing (_ textField: UITextField) { если textField.text != "" { имя = текстовое поле.текст! print(delegate) // печатает ноль print(name) // печатает введенный текст делегат?.saveName(name) // никаких действий } еще { textField.placeholder = "требуется имя*" } } } протокол PopUpDelegate { func saveName (_ имя: строка) } Помощь приветствуется!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение