快速获取所选视图的索引时出现问题
Posted
技术标签:
【中文标题】快速获取所选视图的索引时出现问题【英文标题】:Having an issue grabbing the index of selected viewtable in swift 【发布时间】:2016-02-16 02:52:54 【问题描述】:过去几天我一直在学习 swift,但我遇到了一个我已经坚持了很长时间的错误。
我正在尝试获取选定的 indexPath,以便我可以根据他选择的项目推送数据。我已经搜索并尝试了许多在堆栈溢出以及不同网站上发现的不同解决方案,但我仍然无法弄清楚这一点。
代码如下:
@IBOutlet var selectGroceryTable: UITableView!
/* Get size of table */
func tableView(tableView: UITableView, numberOfRowsInSection: Int) ->Int
return grocery.count;
/* Fill the rows with data */
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let myCell:UITableViewCell = selectGroceryTable.dequeueReusableCellWithIdentifier("groceryListRow", forIndexPath:indexPath) as! UITableViewCell
myCell.textLabel?.text = grocery[indexPath.row];
myCell.imageView?.image = UIImage(named: groceryImage[indexPath.row]);
return myCell;
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
print("Row Selected");
NSLog("Row Selected");
没有任何东西像函数没有被调用一样打印出来。但是,我不明白为什么不调用它?
任何帮助将不胜感激!
更新:
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
selectGroceryTable.data = self;
selectGroceryTable.delegate = self; //gives error states you can not do this
【问题讨论】:
你实现了 selectGroceryTable.delegate = self 吗? 尝试执行此操作时出现错误。请查看更新的代码 可能是因为您没有声明该类符合委托协议。我们都处于你的位置,如果没有一些帮助,很难学会这一点,当我刚开始时,Aaron Hilligas 的大书呆子牧场书籍对我真的很有帮助,祝你好运! 【参考方案1】:在这样的情况下需要检查几件事:
首先,didSelectRowAtIndexPath
是什么方法?
答案:这是一个 UITableViewDelegate 方法。您是否将视图控制器设置为表格视图的委托?如果没有,则不会调用此方法。
其次,您是否绝对确定方法签名与协议中的方法完美匹配?单个字母不合适,大小写错误,参数错误,方法不同,不会被调用。从协议头文件中复制方法签名然后填写正文以避免委托方法的轻微拼写错误是值得的。
在我看来你的方法签名是正确的,所以我的钱是忘记将你的视图控制器设置为表格视图的委托。
【讨论】:
我在原始帖子中添加了一些代码。我确实设置了 table.data = self;但是当我尝试设置委托时,我无法将“ViewController”类型的值分配给“UITableViewDelegate?” 这确实是我们的问题。但是,我无法通过代码 onLoad() 函数执行此操作,但能够通过 UI 界面创建器执行此操作。我只是简单地控制单击了表格,然后将其拖到视图顶部的橙色按钮。以上是关于快速获取所选视图的索引时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
当我在真实设备中频繁推送/返回视图控制器时出现错误“索引超出范围” - Swift
如何在 UIPICKERVIEW (iOS) 中获取所选行的索引号