joe*_*oey 5 xcode delegates uitableview ios swift
我需要tableview通过单击内的按钮将字符串从一个字符串传输到另一个字符串UITableView。我知道如何indexPath通过按钮获取通行符,如下所示:
let button = sender as MyButton
let view = button.superview!
let cell = view.superview as! MyTableViewCell
let indexPath = tableView.indexPathForCell(cell)
Run Code Online (Sandbox Code Playgroud)
上面的代码可以在单击按钮时获取单元格的索引路径,但是为了传输数据,我必须使用prepareForSegue。因此,我自然会尝试使用segue进行准备并更改senderfrom AnyObject?至MyButton
然后,我收到一条错误消息,提示“ 使用选择器prepareforsegue的重写方法具有不兼容的type”。
我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!]
}
Run Code Online (Sandbox Code Playgroud)
我不确定我是否 100% 理解你,但我会尽力帮助你。
无需改变prepareForSegue:方法。您可以从 获得您需要的东西AnyObject。另外我认为你会在这里得到空结果:
var row = self.tableView.indexPathForSelectedRow()?.row
Run Code Online (Sandbox Code Playgroud)
因为点击按钮不会选择您的单元格。
如果您需要处理按钮内部的某些操作,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)
}
}
Run Code Online (Sandbox Code Playgroud)
在你的里面UIViewController:
class MyViewController : UIViewController, MyTableViewCellDelegate {
Run Code Online (Sandbox Code Playgroud)
...
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
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要通过手机点击执行相同的操作,则无需此协议内容,这将非常简单。
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |