我需要通过单击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
}
}
如果你需要做同样的事情,但是通过单元格点击,它将非常简单,没有这个协议的东西.