在swift

时间:2016-02-16 02:52:54

标签: ios iphone swift xcode6 ios9

我在过去的几天里一直在学习,我遇到了一个错误,我已经坚持了很长一段时间了。

我正在尝试获取所选的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

 }

1 个答案:

答案 0 :(得分:2)

在这种情况下,有几件事需要检查:

首先,didSelectRowAtIndexPath是什么类型的方法?

回答:它是一个UITableViewDelegate方法。您是否将视图控制器设置为表视图的委托?如果没有,这种方法不会被调用。

其次,您是否已经确定方法签名与协议中的方法完全匹配?单个字母不合适,错误的大写/小写,错误的参数,这是一种不同的方法,并且不会被调用。将方法签名复制出协议头文件然后填写正文以避免使用委托方法产生轻微的拼写错误是值得的。

在我看来,你的方法签名是正确的,所以我的钱就是忘记将你的视图控制器设置为表格视图的代表。