使用委托将数据从一个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元素?),但目前它有效。
- 如何获取UIImage的RGBA值在特定的点击点
- 如何在没有SIP服务器的情况下拨打直接IP到IP的电话?
- 已弃用:iOS9中的“sendAsynchronousRequest:queue:completionHandler:”
- types'String'的值没有成员'stringByTrimmingCharactersInSet'
- CCAdvancedMenu boundaryRect
- 无法为UILabel中的文本添加边距/填充 – iOS Swift
- 随着快速枚举和NSDictionary,迭代按键的顺序是不能保证 – 我怎么能这样做是为了?
- 在没有Camera API的情况下仅使用HTMLinput在Phonegap应用上使用相机
- 使用UIPageControlbutton按下发送数据和更改页面