【问题标题】:prepareForSegue sending data to tableview in a container viewprepareForSegue 在容器视图中向 tableview 发送数据
【发布时间】:2016-06-05 13:17:53
【问题描述】:

我正在将数据从一个 tableview 列表发送到另一个 tableview,用作所选单元格的详细视图。简单——

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    let index = tableView.indexPathForSelectedRow

    if (segue.identifier == "EventDetailSegue") {
        let detailVC = segue.destinationViewController as! EventDetailTableViewController
        var event : Event
        if searchController.active && searchController.searchBar.text != "" {
        event = filteredEvents[index!.row]
        } else {
        event = events[index!.row]
        }

        detailVC.eventImage = event.image
        detailVC.eventCompany = event.company
        detailVC.eventName = event.name
        detailVC.eventLocation = event.location
        detailVC.eventPrice = event.price
        detailVC.eventPromoterImage = event.promoterImage
    }
}

因为我现在想在详细表格视图的底部有一个静态按钮栏。我需要将 EventDetailTableViewController 更改为 UIViewController 上的容器视图。所以我可以在 UIViewController 中简单地做我想做的事情。

我的问题是我如何仍将这些数据发送到容器视图内现在嵌入的 EventDetailTableViewController?由于 segue 现在需要使用容器视图进入 UIViewController,但我还需要确保将这些数据传递给容器内的 TableView。

【问题讨论】:

  • 创建一个 EventDetailTableViewController 的实例,然后设置它的数据,然后将它传递给 UIViewController。在 UIViewController viewdidload 中使用 EventDetailTableViewController 实例
  • 谢谢,试试看!在 viewdidload 中使用 EventdetailTableViewController 实例是什么意思?在创建一个实例并通过 segue 将其传递给 UIViewcontroller 之后,我如何将它放入其容器内的 EventDetailTableViewController 中?
  • 让实例成为childcontroller然后把tableview放到你想要的容器视图中
  • 为什么不把 EventDetailTableViewController 改成 UIViewController 的子类而不是 UITableViewController。然后,您可以在一个 VC 中做任何您想做的事情。
  • 目前我有 EventDetailTableViewController 类:ParallaxTableViewController。这是我在 github 上找到的一个库。我还能简单地将所有这些子类化到标准的 UIViewController 中吗?威尔逊您能否举一个代码示例来说明您对子控制器的含义我不太确定我是否理解:)

标签: ios swift uitableview uicontainerview


【解决方案1】:

我使用颜色而不是数据:
EventDetailTableViewController ->ViewController3
UIViewController -> ViewController2 试试这样:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let tableVc = ViewController3()
    tableVc.color = UIColor.redColor()
    let vc = ViewController2()
    vc.tableViewController = tableVc
    self.navigationController?.pushViewController(vc, animated: true)

}

}

class ViewController2: UIViewController {

var tableViewController:ViewController3!

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.yellowColor()
    tableViewController.willMoveToParentViewController(self)
    addChildViewController(tableViewController)
    tableViewController.view.frame = CGRect(x: 0, y: 100, width: 100, height: 100)
    view.addSubview(tableViewController.view)
    tableViewController.didMoveToParentViewController(self)


}
}
class ViewController3: UITableViewController {

var color :UIColor!

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = color
}
}

希望对你有所帮助:-)

【讨论】:

  • 谢谢我现在明白这一点,尽管出于某种原因,因为把这个 tableViewController 作为一个子视图。它无法识别小区标识符。很奇怪..有什么想法吗?
  • @MattPorter 添加此:tableViewController.didMoveToParentViewController(self),我已编辑,如果不起作用,请显示更多详细信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多