我有一个TableViewController,TableViewCell和一个ViewController。我在TableViewCell中有一个按钮,并且想向其中显示ViewController presentViewController(但ViewController在故事板上没有视图)。我尝试使用:
presentViewController
@IBAction func playVideo(sender: AnyObject) { let vc = ViewController() self.presentViewController(vc, animated: true, completion: nil) }
错误:TableViewCell类型的值没有成员presentViewController
然后,我尝试
self.window?.rootViewController!.presentViewController(vc, animated: true, completion: nil)
错误:警告:尝试显示其视图不在窗口层次结构中!
我究竟做错了什么? 我应该怎么做才能从TableViewCell呈现PresentController?另外,如何将数据从TableViewCell传递到新的呈现VC?
更新:
protocol TableViewCellDelegate { buttonDidClicked(result: Int) } class TableViewCell: UITableViewCell { @IBAction func play(sender: AnyObject) { if let id = self.item?["id"].int { self.delegate?.buttonDidClicked(id) } } } ---------------------------------------- // in TableViewController var delegate: TableViewCellDelegate? func buttonDidClicked(result: Int) { let vc = ViewController() self.presentViewController(vc, animated: true, completion: nil) }
我收到错误:不建议在分离的视图控制器上显示视图控制器
(请注意,TableView后面有一个NavBar和TabBar链。)
我也试过
self.parentViewController!.presentViewController(vc, animated: true, completion: nil)
同样的错误。
也尝试过
self.view.window?.rootViewController?.presentViewController(vc, animated: true, completion: nil)
同样的错误
您应该protocol用来将动作传回tableViewController
protocol
tableViewController
1)protocol在您的单元格班级中创建一个
2)使button动作成为您的protocol功能
button
3)将您cell's protocol在tableViewController通过cell.delegate = self
cell's protocol
cell.delegate = self
4)实施cell's protocol并在其中添加代码
let vc = ViewController() self.presentViewController(vc, animated: true, completion: nil)