我有一个应用程序设置有一个主根 viewController 和一个带有“设置按钮”的导航栏。当用户点击设置按钮时,它会弹出一个不是动态的而是静态的“settingsTableViewController”,因此我可以使用样式等设置来格式化表格 View 。
在此设置 View 中,我有一个采用人名的 UITextField。
当用户单击导航栏中的“完成”时,我想将该名称传递回主 Root View Controller ,以便我可以在标题中使用它来显示人物的姓名。 (我想在关闭 View 时传递名称)
我曾尝试使用 segue,但没有成功。这是我尝试过的一些方法。
SettingsViewController(在 MasterVC 上弹出)
class SettingsTableViewController: UITableViewController {
@IBOutlet weak var nameTextfield: UITextField!
@IBAction func done(sender: AnyObject) {
self.dismissViewControllerAnimated(true, completion: nil)
}
override viewDidLoad(){
self.title = "Settings"
}
// MARK: - Navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Trying to pass what was typed in the textfield to the Root ViewController and store this name in a variable of type String called 'name'
if segue.identifier == "masterView"{
let masterViewController = segue.destinationViewController as! MasterTableViewController
masterViewController.name = nameTextField.text
print("Segue was used")
}
}
}
MasterTableViewController.swift
class MasterTableViewController: UITableViewController {
var name: String!
// I am trying to then display the name entered in the pop-over view in this root view controller's title
override viewDidLoad(){
self.title = name!
}
}
我的问题是,我做错了什么?我曾尝试使用委托(delegate),但我得到的结果为零,而且数据似乎没有以任何一种方式传递,因此任何线索都会有很大帮助。谢谢
最佳答案
有一种叫做 Unwind Segue 的不同类型的 segue 可以做到这一点。它不会创建新的 mvc,它用于将数据传回呈现当前 mvc 的 vc。这是怎么做的 首先,转到您的 Storyboard并控制从 settingVc 拖动到它顶部的退出按钮(到它自己)。它会给你'Selection Segue'并选择IBAction goBack。这意味着任何呈现当前版本的 vc 都将在实现此方法时做好准备。换句话说,您正在发布一个协议(protocol),演示者 vc 将通过实现 goBack IBAction 来遵守。这是实现它的方法。在你的 Mater vc 中
//You must have this function before you do the segue in storyboard
@IBAction func goBack(segue: UIStoryboardSegue){
/* this is optional
if let stv = segue.sourceViewController as? SettingsTableViewController{
self.name = stv.nameTextfield?.text
}
*/
}
在你的设置vc(当前vc)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
//make sure you set the id of your segue to "Your Go back Unwind segue". ofc u can name it whatever
if segue.identifier == "Your Go back Unwind segue"{
if let mtvc = segue.destinationViewController as? MasterTableViewController{
mtvc.name = nameTextField.text
print("Segue was used")
}
}
}
done方法应该是这样的
@IBAction func doneEditing(sender: UIButton) {
presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
}
关于ios - 将数据从 Pop-over ViewController UITextfield 传回 Master ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799452/