Передача данных между UIView и UIViewController - PullRequest
0 голосов
/ 20 января 2020

Заранее извиняюсь, если у него уже есть ответ, но я не смог найти ответ, который искал.

Я застрял на лучшем способе подойти к передаче данных из UIView в UIViewController. Предположим, у меня есть данные формы с информацией, которую заполнил пользователь. Данные существуют в представлении через отдельные поля UITextFields. Как передать эту информацию контроллеру для выполнения проверки и создания запроса на отправку с этими данными?

Имеет ли смысл делать это через замыкание? Например:

@objc func submitFormData() {
    // call function passed via the view controller
}

Какова наилучшая практика для передачи данных между представлением и контроллером? К вашему сведению, я не использую StoryBoard, и я создаю все программно.

Ответы будут с благодарностью, спасибо!

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Сначала создайте структуру / модель ваших данных и выполните необходимую проверку.

class UserDataSpecifier {

    var fields = [UserField]()

    struct UserField {
        var title: String?
        var placeHolder: String = ""
        var inputTxt: String = ""
        var image: String = ""

        init(titleStr: String, inputStr: String? = "", img: String = "") {
            title = titleStr
            placeHolder = titleStr
            inputTxt = inputStr ?? ""
            image = img
        }
    }

    init() {
        prepareForSignup()
    }

    func prepareForSignup() {
        fields.append(UserField(titleStr: "First Name")
            fields.append(UserField(titleStr: "Email"))
            fields.append(UserField(titleStr: "Password"))
    }

func isValidData(type: FormType) -> (isValid: Bool, error: String) {
     if fields[0].inputTxt.isEmpty {
       return (false, "Enter your message")
     } else if fields[1].inputTxt.isEmpty {
       return (false, "Enter your email")
     }
   return (true, "")
}

}

В вашем классе ViewController создайте экземпляр данных. Введите значение этого объекта и затем подтвердите его.

   var userData: UserDataSpecifier = UserDataSpecifier()


   userData.fields[0].inputTxt = "name"
   userData.fields[1].inputTxt = "email@gmail.com

     let result = userData.isValidData()
        if result.isValid {
           print("Valid data")
        } else {
           print(result.error)
        }

Вы также можете передать этот экземпляр userData своему представлению и заполнить ваши данные из вашего представления. После заполнения данных проверьте его в ViewController.

0 голосов
/ 20 января 2020

По моему мнению, лучший способ передать данные из View в ViewController будет через Delegates и Protocols.

  • Создайте протокол в ViewController с функцией submitFormData().
  • Объявите переменную делегата в представлении
  • Установите ViewController как View's delegate
  • Затем в вашей функции "submitFormData" вызовите delegate.submitFormData().

Есть и другие способы передачи данных, это мое личное предпочтение. Надеюсь, это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...