【问题标题】:Passing data from Pop-over ViewController UITextfield back to Master ViewController将数据从 Pop-over ViewController UITextfield 传递回 Master ViewController
【发布时间】:2015-12-24 07:20:13
【问题描述】:

我有一个应用程序设置有一个主根视图控制器和一个带有“设置按钮”的导航栏。当用户点击设置按钮时,它会弹出一个“settingsTableViewController”,它不是动态的,而是静态的,因此我可以使用样式等设置格式化表格视图。

在这个设置视图中,我有一个 UITextField,它带有一个人的名字。

当用户在导航栏中单击“完成”时,我想将该名称传递回主根视图控制器,以便我可以在标题中使用它来显示人的名称。 (我想在关闭视图时传递名称)

我曾尝试使用 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!
  }
 }

我的问题是,我做错了什么?我曾尝试使用委托,但我得到了 nil,而且数据似乎没有通过任何一种方式,所以任何线索都会有很大帮助。谢谢

【问题讨论】:

    标签: ios swift segue ios9


    【解决方案1】:

    有一种叫做 Unwind Segue 的不同类型的 segue 可以做到这一点。它不会创建新的 mvc,它用于将数据传递回提供当前 mvc 的 vc。这是怎么做的 首先,转到您的故事板并控制从 settingVc 拖动到它顶部的退出按钮(到它本身)。它会给你'Selection Segue'并选择IBAction goBack。这意味着如果他们实现这个方法,任何呈现当前的 vc 都将准备好。换句话说,您正在发布一个协议,并且演示者 vc 将通过实现 goBack IBAction 来遵守。这是如何实现的。在你的母校 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")
            }
        }
    }
    

    and done 方法应该是这样的

    @IBAction func doneEditing(sender: UIButton) {
        presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
    }
    

    【讨论】:

    • 一个问题:我进入了我的故事板,点击了 SettingsVC 表格视图,并按照您所说的控制拖动(视图中的任何位置)到其自身顶部的退出图标(如您所说),但什么也没发生,我从主视图控制器中取消了此设置视图的链接,并且现在它是独立的。 (MasterVC 有一个名为“设置”的左上角按钮,该按钮调用此设置 VC
    • 对不起,我忘了说你需要把 IBAction goBack 放在你的主人中,然后你才能在情节提要中继续退出按钮
    • 谢谢,当我按下“设置”按钮以调出模式视图以将数据放入文本字​​段时,它不起作用。当点击完成时,什么也没发生。
    • 那是因为您将解雇发送给自己,但您应该在演示者 vc 上调用它,我在答案中添加了 done func
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2021-05-04
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多