使用委托将数据从一个TableView中转移到另一个
我需要通过点击一个按钮,是UITableView
内的字符串从一个tableview
转移到另一个。我知道如何通过一个按钮来获得indexPath
,像这样:使用委托将数据从一个TableView中转移到另一个
let button = sender as MyButton
let view = button.superview!
let cell = view.superview as! MyTableViewCell
let indexPath = tableView.indexPathForCell(cell)
上面的代码工作,以获得细胞的indexpath点击一个按钮,zhowever为了传输数据,我不得不使用prepareForSegue
。所以自然我试着用准备for segue并从AnyObject
改变sender
?到MyButton
然后我收到一条错误消息,说“覆盖方法与选择器prepareforsegue具有不兼容类型”。
我搜索并阅读关于迅速和delegates
如何将这些能帮助,我试图通过MakeAppPie这里给出了答案:
Delegates in swift?但它并没有为我工作。
有什么办法结合起来,赛格瑞和我上面的代码的准备?我试过这个,但是它导致了我刚才提到的错误信息:
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
}
}
在情况下,如果您需要做同样的事情,但通过细胞攻丝,它将muc h简单,没有这个协议的东西。
我找到了解决的答案/工作。我没有使用UIButton
来执行segue,而是使用了一个标签,所以当我点击标签时,它被注册为在tableview单元格上的点击。这使我可以通过点击来获取索引路径,同时也可以正确使用准备传输所需的数据。
我不知道这是否会持续/可以接受苹果每当我提交(通过使用标签,按钮或者UI元素的滥用?),但暂时它的工作原理。
这是更接近,但仍不完全它。唯一的问题是我需要传输的字符串在视图控制器中。它是一个数组中的索引,并且该数组仅存在于视图控制器中。在该溶液中的字符串是在这里: @IBAction FUNC buttonTapped(发件人:AnyObject){ 令字符串= “” self.delegate.actionButtonTapped(字符串) } 因此字符串仍然不能转移 –
joey
@joey,你可以添加一个属性到你的单元类,并在cellForRowAtIndexPath方法中分配它。通常您需要将对象传递给UITableViewCell类,并在单元类中进行一些映射。所以你可以在单元格内获得对象(或对象属性)。 – AlexZd