使用委托将数据从一个TableView传输到另一个

我需要通过单击UITableView内的按钮将字符串从一个tableview转移到另一个tableview 。 我知道如何通过按钮获取indexPath ,如下所示:

  let button = sender as MyButton let view = button.superview! let cell = view.superview as! MyTableViewCell let indexPath = tableView.indexPathForCell(cell) 

上面的代码用于获取按钮单击时单元格的索引路径,zhowever为了传输数据,我必须使用prepareForSegue 。 所以很自然地我尝试使用prepare for segue并从AnyObject更改sender ? 到MyButton

然后我收到一条错误消息,说“ 使用选择器prepareforsegue的覆盖方法具有不兼容的类型”

我搜索并阅读了swift中的delegates以及这些代码如何提供帮助,我尝试了MakeAppPie给出的答案:

代表们迅速? 但它对我不起作用。

有没有办法将segue的准备和我上面的代码结合起来? 我尝试了这个,但它导致了我刚才提到的错误消息:

  override func prepareForSegue(segue: UIStoryboardSegue, sender: MyButton) { let myVC = segue.destinationViewController as? CommentsViewController let usender:AnyObject = sender! let button = usender as? MyButton let view = button.superview! myVC!.title = button.titleForState(.Normal) let cell = view.superview as! QuestionCell let indexPath = tableView.indexPathForCell(cell) println(self.short_descriptionArray) var row = self.tableView.indexPathForSelectedRow()?.row myVC!.nameToGet = short_descriptionArray[row!] } 

我不确定我100%得到你,但我会尽力帮助你。

无需更改prepareForSegue:方法。 您可以从AnyObject获得所需的AnyObject 。 另外我想你会在这里得到空的结果:

 var row = self.tableView.indexPathForSelectedRow()?.row 

因为点击按钮不会选择您的单元格。

如果你需要从UITableViewCell里面的按钮处理一些动作,你需要在你的单元类中添加:

 protocol MyTableViewCellDelegate : NSObjectProtocol { func actionButtonTapped(string:String) } class MyTableViewCell: UITableViewCell { var delegate : MyTableViewCellDelegate! @IBAction func buttonTapped(sender: AnyObject) { let string = "" self.delegate.actionButtonTapped(string) } } 

在你的UIViewController里面:

 class MyViewController : UIViewController, MyTableViewCellDelegate { 

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { ... cell.delegate = self ... return cell } func actionButtonTapped(string:String) { self.performSegueWithIdentifier("segueIdentifier", sender: string) } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if let myVC = segue.destinationViewController as? CommentsViewController { myVC.nameToGet = sender as! String } } 

如果你需要做同样的事情,但需要通过单元格点击,它将非常简单,没有这个协议的东西。

我找到了答案/解决方法。 我没有使用UIButton来执行segue,而是使用了标签,所以当我点击标签时,它会被注册为tableview单元格上的一个点击。 这允许我通过单击获取索引路径,并且还正确地使用准备segue来传输所需的数据。

每当我提交它时,我不确定这是否会被Apple接受(可能是通过使用标签作为按钮滥用UI元素?),但目前它有效。