Как передать второе значение текстового поля viewcontroller в первый массив viewcontroller и отклонить при нажатии кнопки в swift4

У меня есть два контроллера представления, я хочу отправить значение текстового поля второго контроллера представления в первый массив контроллеров представления и отклонить второй контроллер представления при нажатии кнопки.

вот мой код:

в первом ВК:

я создал массив:

var iteamsArr = [String]()

во втором ВК:

class CreatePopUpViewController: UIViewController {


var popData: String?
var createBussnss = CreateBusinessViewController()// is my firstVC name
@IBOutlet weak var addTf: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

@IBAction func saveButn(_ sender: Any) {

  createBussnss.iteamArray.append(addTf.text!)

    dismiss(animated: true, completion: nil)
}

}

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

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
401
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте делегат.

protocol CreatePopUpDelegate: class {
     func createPopUpDidSaveTextFieldPick(_ value: String)
}

Затем в контроллере первого вида:

extension FirstViewController: CreatePopUpDelegate {
    func createPopUpDidSaveTextFieldPick(_ value: String) {
        print ("first view controller now has value of textfield")
        // add it to array or whatever
}

Затем во втором контроллере представления:

class CreatePopUpViewController: UIViewController, MyDelegate {
    weak var delegate: CreatePopUpDelegate?

@IBAction func saveButn(_ sender: Any) {

    createBussnss.iteamArray.append(addTf.text!)

    delegate?.createPopUpDidSaveTextFieldPick(addTf.text!)
    dismiss(animated: true, completion: nil)

}

где-то в коде вам просто нужно сделать:

secondViewController.delegate = firstViewController.

В сценариях такого типа экземпляр secondViewController создается и представляется из firstViewController, поэтому вы просто делаете:

secondViewController.delegate = self

Кроме того, в качестве общего совета подготовьте Руководство по коду для Swift. В Swift предпочтительны более длинные и понятные имена.

Вместо saveButn делайте saveButton.

Вместо addTf делайте addTextField.

Вместо createBussnss делайте createBussiness

Также не делайте !, лучше делайте guard let text = textField.text else { return.

Удачи! Это более понятный и лучший код.

Большое спасибо, это действительно полезно, я проголосовал и принял ваш ответ, но я очень плохо знаком с быстрым, у меня есть одно сомнение ... где я должен создать CreatePopUpDelegate

iosSwift 08.05.2019 11:55
CreatePopUpDelegate можно создать где угодно. Выше определения любого из ваших классов или где угодно.
regina_fallangi 08.05.2019 13:43

Вы можете использовать делегат для связи между двумя контроллерами, а теперь в Swift мы можем даже использовать замыкания для того же. Вам нужно объявить обработчик во втором ViewController, например:

var saveButtonHandler = ((_ handler: String?) -> Void)

В FirstViewController, где вы будете нажимать на контроллер, вы можете определить этот обработчик, например

secondViewController.saveButtonHandler = { (text:String) in //append your text here to array
}

и при нажатии кнопки сохранения

self.saveButtonHandler?(<Your_Text>)

Просто убедитесь, что вы используете только String внутри обработчика, не используйте кнопку или какие-либо переменные secondViewController. Вы можете попасть в цикл удержания.

regina_fallangi 08.05.2019 11:42

Другие вопросы по теме