在 swift 中获取选定视图表的索引时出现问题
Having an issue grabbing the index of selected viewtable in swift
过去几天我一直在学习 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
}
在这种情况下需要检查几件事:
首先,didSelectRowAtIndexPath
是一种什么样的方法?
回答:这是一个UITableViewDelegate方法。您是否将视图控制器设置为 table 视图的委托?否则,将不会调用此方法。
其次,您是否完全确定方法签名与协议中的方法完全匹配?一个字母错位,错误的 upper/lower 大小写,错误的参数,并且是不同的方法,不会被调用。将方法签名直接从协议头文件中复制出来,然后填写主体以避免使用委托方法出现小错别字是值得的。
在我看来你的方法签名是正确的,所以我的钱是在忘记将你的视图控制器设置为 table 视图的委托。
过去几天我一直在学习 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
}
在这种情况下需要检查几件事:
首先,didSelectRowAtIndexPath
是一种什么样的方法?
回答:这是一个UITableViewDelegate方法。您是否将视图控制器设置为 table 视图的委托?否则,将不会调用此方法。
其次,您是否完全确定方法签名与协议中的方法完全匹配?一个字母错位,错误的 upper/lower 大小写,错误的参数,并且是不同的方法,不会被调用。将方法签名直接从协议头文件中复制出来,然后填写主体以避免使用委托方法出现小错别字是值得的。
在我看来你的方法签名是正确的,所以我的钱是在忘记将你的视图控制器设置为 table 视图的委托。