Swift UITableView响应用户点击一个单元格

时间:2014-12-10 12:22:50

标签: ios uitableview swift

在TableViewController中我有这段代码:

override func viewDidLoad(){

    super.viewDidLoad()

    self.tab = UITableView(frame: CGRectMake(8, 80, 584, 512), style: UITableViewStyle.Plain)
    self.tab?.delegate = self
    self.tab?.dataSource = self
    self.tab?.registerClass(CustomCell.self, forCellReuseIdentifier: "cell")
    self.tab?.reloadData()

    self.view.addSubview(tab!)

}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let count = self.data.count {
        return count
    }
    return 0
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as? CustomCell
    if cell == nil {
        cell = CustomCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "cell")
    }
    if let item = self.data[indexPath.row] as DataItem? {
        // cell.updateWithDataItem(item)
        // this line is commented out because the error occurs with or without this line
    }
    return cell
}

在我的CustomCell中,我有这段代码:

override func setSelected(selected: Bool, animated: Bool){
    super.setSelected(selected, animated: animated)
    println("cell selected \(id)")
}

当我从服务器获取我的JSON数据时,我在TableViewController中有这个代码填充了表self.tab

self.data = JSONData
dispatch_async(dispatch_get_main_queue(), {
     self.tab?.reloadData()
})

我的问题是,当我填充self.tab,我的UITableView时,我最终会在控制台中显示它

cell selected f4324
cell selected f4325
cell selected f4326
cell selected f4327
cell selected f4328
...... and so on .....

就好像正在选择单元格,因为它们被添加到我的UITableView中。

  • 这是UITableView的典型行为吗?

  • 我想停止此行为,并且只有响应用户交互的代码(不是正在填充的表)。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:15)

是的,这是UITableView和UITableViewCell的正常行为。使其响应用户交互。您可以实现UITableView的委托方法:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath);

当用户点击单元格时,将调用此函数。