TableView didSelect响应问题在Swift中

时间:2016-09-17 04:08:04

标签: swift uitableview

我有一个tableView在我的项目中成功运行。但是,我在选择单元格并更新我在同一个viewController中连接到tableview的textView时遇到问题。我的textView仅在我长按tableViewCell时更新。我想要每次按下单元格时都会更新textView。我相信,当我按下单元格时会取消选择。我的部分代码如下......

注意: 我在我的不同项目中使用以下代码,没有任何问题..我不确定这个tableview有什么问题....

提前致谢....

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let CellIdentifier: String = "fontCell"
    let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(CellIdentifier, forIndexPath: indexPath)

     let fontName: String = self.fontName[indexPath.row] as! String

    UIView.animateWithDuration(1, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.5, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in 

    cell.textLabel?.text = fontName
    cell.textLabel!.font = UIFont(name: self.fontName[indexPath.row] as! String, size: 25)

    }, completion: nil)

    cell.backgroundColor = UIColor.clearColor()
    cell.textLabel?.textAlignment = .Center
    cell.textLabel?.textColor = UIColor.whiteColor()
    cell.textLabel?.sizeToFit()
    cell.textLabel?.adjustsFontSizeToFitWidth = true
    cell.selectionStyle = .Default

    return cell 
}

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
  //tableView.deselectRowAtIndexPath(indexPath, animated: true)

    dispatch_async(dispatch_get_main_queue(), { () -> Void in
    let fontName: String = self.fontName[indexPath.row] as! String

    self.textView.font = UIFont(name: fontName, size: 20)
  })

}

1 个答案:

答案 0 :(得分:1)

应该已经在主线程上调用

didSelectRowAtIndexPath所以删除dispatch_async并且只运行这样的代码应该没问题

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let fontName: String = self.fontName[indexPath.row] as! String
    self.textView.font = UIFont(name: fontName, size: 20)
}

如果您已经在tableView中添加了一个手势识别器来处理可能会干扰其他水龙头的长按(或其他)。 尝试在识别器上将cancelsTouchesInView设置为false。

tapGestureRecognizer.cancelsTouchesInView = false