如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭
Posted
技术标签:
【中文标题】如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭【英文标题】:How to pass second viewcontroller textfield value to first viewcontroller array and dismiss when button tapped in swift4 【发布时间】:2019-05-08 09:06:06 【问题描述】:我有两个视图控制器,我想将第二个视图控制器文本字段值发送到第一个视图控制器数组并在点击按钮时关闭第二个视图控制器。
这是我的代码:
在第一个VC中:
我已经创建了数组:
var iteamsArr = [String]()
在第二个VC中:
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)
这里 viewcontroller 正在关闭,但没有在第一个 viewcontroller 中添加值 请帮帮我
【问题讨论】:
【参考方案1】:使用委托。
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 中,首选更长更清晰的名称。
用saveButton
代替saveButn
。
用addTextField
代替addTf
。
用createBussiness
代替createBussnss
同时避免使用!
,最好使用guard let text = textField.text else return
。
祝你好运! 更清晰、更好的代码。
【讨论】:
非常感谢,它真的很有帮助,我赞成并接受了你的回答,但我对 swift 很陌生,我有一个疑问.. 我应该在哪里创建 CreatePopUpDelegateCreatePopUpDelegate
可以在任何地方创建。在您的任何类或任何地方的定义之上。【参考方案2】:
您可以使用委托在两个控制器之间进行通信,现在在 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
的按钮或任何变量。您可能会陷入保留周期。以上是关于如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭的主要内容,如果未能解决你的问题,请参考以下文章