将对象从tableview传递到目标,其中包含revealviewcontroller

时间:2016-04-13 19:02:33

标签: swift uitableview swrevealviewcontroller

我正在尝试将一个对象从我的tableview传递到详细视图。我使用revealviewcontroller框架有一个滑出菜单。因此,我需要从tableview创建一个segue到revealviewcontroller,并从这里创建另一个到最终的detailviewcontroller。

这就是为什么我不能在详细视图中设置对象 - 任何想法如何这样做?

这是使用过的代码:

if segue.identifier == "communityDetailSegue" {

  // Get the cell that generated this segue.
  if let selectedCommunityCell = sender as ? UITableViewCell {

    let destination = segue.destinationViewController as!CommunityViewController

    if let communityIndex = self.tableView.indexPathForCell(selectedCommunityCell) {

      destination.community = self.communitiesOfCurrentUser[communityIndex.row]
      print(self.communitiesOfCurrentUser[communityIndex.row].name)
    }

  }
}

这是例外。

  

无法将'SWRevealViewController'类型的值(0x10027b9f0)转换为'CommunityViewController'

1 个答案:

答案 0 :(得分:1)

您收到错误是因为segue的目标VC是SWRevealViewController而不是CommunityViewController

解决问题的一种方法是分两步传递值:

首先,在prepareForSegue()中,您将值传递给SWRevealViewController(您需要此类的子类,例如MyRevealViewController):

if segue.identifier == "communityDetailSegue" {

  // Get the cell that generated this segue.
  if let selectedCommunityCell = sender as ? UITableViewCell {

    let destination = segue.destinationViewController as! MyRevealViewController

    if let communityIndex = self.tableView.indexPathForCell(selectedCommunityCell) {

      destination.community = self.communitiesOfCurrentUser[communityIndex.row]
      print(self.communitiesOfCurrentUser[communityIndex.row].name)
    }
  }
}

然后,在MyRevealViewController中,您可以在设置后立即传递值:

class MyRevealViewController : SWRevealViewController {

    // Let's assume this is the outlet to your final VC:
    IBOutlet let communityViewController: CommunityViewController!

    var community: YourCommunityType {
       didSet {
          if let communityVC = self.communityViewController {
              communityVC.community = self.community
          }
       }
    }
}