在 UIView 和 UIViewController 之间传递数据

Passing data between UIView and UIViewController

如果这已经有了答案,但我找不到我正在寻找的答案,请预先道歉。

我一直坚持将数据从 UIView 传递到 UIViewController 的最佳方法。假设我有这个表单数据,其中包含用户填写的信息。数据通过单独的 UITextFields 存在于视图中。我应该如何将这些信息传递给控制器​​以执行验证并使用此数据创建 post 请求?

通过闭包来做这件事有意义吗?像下面这样:

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

在视图和控制器之间传递数据的最佳做法是什么?供您参考,我没有使用故事板,而是以编程方式创建所有内容。

不胜感激,谢谢!

在我看来,将数据从 View 传递到 ViewController 的最佳方式是通过 DelegatesProtocols

  • 使用 submitFormData() 函数在 ViewController 中创建协议。
  • 在视图中声明一个委托变量
  • ViewController设置为View'sdelegate
  • 然后在你的“submitFormData”函数中,调用delegate.submitFormData().

还有其他传递数据的方式,这只是我个人的喜好。希望这有帮助!

首先,对您的数据进行 structure/Model 并进行必要的验证。

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 class 中创建一个数据实例。填充该对象的值,然后对其进行验证。

   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 中验证它。