我需要点击tableview
内的按钮,将字符串从一个UITableView
转移到另一个indexPath
。我知道如何通过按钮获取 let button = sender as MyButton
let view = button.superview!
let cell = view.superview as! MyTableViewCell
let indexPath = tableView.indexPathForCell(cell)
,如下所示:
prepareForSegue
上面的代码用于在单击按钮时获取单元格的索引路径,但是为了传输数据,我必须使用sender
。所以很自然地我尝试使用准备segue并从AnyObject
更改MyButton
?到delegates
然后我收到一条错误消息,说“覆盖方法,选择器prepareforsegue具有不兼容的类型。”
我在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!]
}
以及这些如何提供帮助,我尝试了MakeAppPie给出的答案:
Delegates in swift?但它对我不起作用。
有没有办法将segue的准备和上面的代码结合起来?我尝试了这个,但它导致了我刚才提到的错误信息:
select * from emp where Action ='D' OR Deptno='' OR Deptno is null
答案 0 :(得分:2)
我不确定我是否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
}
}
如果您需要通过单元格点击进行相同的操作,那么如果没有此协议的话,它将会非常简单。
答案 1 :(得分:0)
我找到了答案/解决方法。我没有使用UIButton
来执行segue,而是使用了标签,所以当我点击标签时,它会被注册为tableview单元格上的一个点击。这允许我通过点击获得索引路径,并且还正确地使用准备segue来传输所需的数据。
我不确定Apple在提交时是否会持续/接受它(可能是使用标签作为按钮滥用UI元素?),但暂时还可以。