在 UIView 和 UIViewController 之间传递数据



如果这已经有答案,但我无法找到我正在寻找的答案,请事先道歉。

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

通过闭包执行此操作有意义吗?如下所示:

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

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

答案将不胜感激,谢谢!

首先,创建数据的结构/模型并进行必要的验证。

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 实例传递到您的视图,并从您的视图中填充您的数据。填充数据后,在视图控制器中对其进行验证。

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

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

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

最新更新