【问题标题】:swift segue to previous VC with data使用数据快速转到以前的 VC
【发布时间】:2015-11-12 23:45:19
【问题描述】:

我希望执行两种不同的转场。

我有一个通过“Present Modally” 输入的 VC。从那个 VC 我有另一个 segue(Push) 导致 TableView VC。

问题 1

一旦你触摸了一行,我希望能够从表格视图返回到上一个 VC。所以我的问题是我不知道要使用哪种类型的 segue 才能返回一步,但同时还要发送数据。

我有一个关闭按钮设置为“展开到 VC”,但这只是关闭我的 VC。

问题 2

从 TableView 我有另一个 segue(push) 导致另一个 TableView VC。 - 您选择类别,然后选择子类别。 我的问题是我不知道如何返回一步或如何对 VC1 进行转场,从两个表视图控制器发送信息。

谢谢

【问题讨论】:

标签: ios iphone xcode swift


【解决方案1】:

问题一:

在 YourTableViewController 类的顶部(不是在类内部,而是在顶部表示外部)实现以下协议:

protocol MyTableViewControllerDelegate {
func tableViewController(controller: YourTableViewController, didFinishPicking Item item: SomeItemYouWantToPassBack)
}

然后您执行以下操作:在您的表视图控制器类(YourTableViewController)中实现这些:

弱 var 委托:MyTableViewControllerDelegate? \实现委托的风格。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

let itemYouWantToPassBackToVC: SomeItemYouWantToPassBack = dataImplementedInTableView[indexPath.row]
delegate?.tableViewController(self, didFinishPickingItem item: itemYouWantToPassBackToVC)

dismissViewControllerAnimated(true, completion: nil)


tableView.deselectRowAtIndexPath(indexPath, animated: true)


}

然后在您之前的 VC 中实现您在协议中创建的功能:

func tableViewController(controller: YourTableViewController, didFinishPicking Item item: SomeItemYouWantToPassBack) {

// Here you take the "item" parameter and use it for your purpose. It is the item you wanted to pass back here

}

另外阅读苹果文档以了解有关协议和委托的更多信息。

问题2:

好的...在这种情况下,我建议如下:在 VC1 中实现以下功能:

@IBAction func unwindToVC1() {
\\you can leave this place empty 
}

然后,注意这些词:在你的storyBoard 中找到TableView 2 的视图控制器(显示所有子类别的那个),在它上面你会看到三个按钮。 CTRL + 从黄色拖动到红色出口门,然后从弹出窗口中选择“unwindToVC1”。

在文档大纲(显示故事板中所有内容的列表视图)中找到新创建的 segue 并为其命名,让我们说“segueVC1”。

然后在 TableViewControllerNumberTwo 中实现这个:

override func tableView(tableView: UITableView, didSelectItemAtIndexpath indexPath: NSIndexPath) {

    let item1 = yourDataModel[indexPath.row]
    performSegueWithIdentifier("segueVC1", sender: item1)

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

   if let segue.identifier == "segueVC1" {
   let vc = segue.destinationViewController as VC1 \\ VC1 is the first vc you want to segue to
   vc.modelToReceive = sender as modelToReceiveClass

 }
}

【讨论】:

  • 非常感谢!结果完美!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多