ios – 使用委托将数据从一个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)

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

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

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

Delegates in swift?但它对我不起作用.

有没有办法将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获得所需的内容.另外我想你会得到空的结果:

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 = "<your 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
    }
}

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

点赞