2017-07-07 79 views
2

我有一个关于UITableView代表函数didSelectRowAt的问题。一切工作正常,但不幸的是didSelectRowAt不叫。我读了关于这个问题的一些其他的stackoverflow问题,并尝试了一些解决方案,但没有一个适合我。我做了这是代表他自己的tableview的一个子类:'didSelectRowAt'不被称为

class MyTableView : UITableView, UITableViewDelegate{ 

    override func awakeFromNib() { 

     super.awakeFromNib() 

     separatorStyle = .none 

     backgroundView = nil 
     backgroundColor = UIColor.clear 

     isScrollEnabled = false 

     delegate = self 
     isEditing = false 
     allowsSelection = true 

    } 


// func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) { 
//  
// this is working   
// 
// } 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     print("not called") 

    }  

} 

所以MyTableView所有子类将实现数据源的东西,这也工作正常(如果莫名其妙地会提到这一点)。

奇怪的是,didHighlightRowAt被调用,所以代理以某种方式工作。只有我想要的didSelectRowAt没有被调用。

顺便说一句,没有任何UITapGestureRecognizer

可以以某种方式给我任何建议在这里。有哪些属性是错误的?

+0

确保您的手机已启用用户交互 –

+0

检查Tableview单元格是可选的并检查用户交互是否启用? –

+0

你的视图控制器中是否有任何'UITapGestureRecognizer'? – Lawliet

回答

1

我不知道您尝试过的其他解决方案,但是如果您使用的是自定义视单元,则可能是因为您没有在该组件上启用“用户交互已启用”

+0

我再次检查它。它已启用。我在didHighlightRowAt函数(正在工作)中检查了isUserInteractionEnabled属性。 –

+0

我检查了一个示例代码,它工作正常。很确定它与你的自定义UITableViewCell有关。请确保禁用您的子视图中启用的任何用户交互。 –

1

请检查TableView's单元允许选择。

tableView.allowsSelection = true 
+0

也检查了这一个。它设置为.default就像从此断点获取:currentCell.selectionStyle \t(UITableViewCellSelectionStyle)默认 –

+0

答案已更新。请检查。它允许选择 –

0

有可能是以下问题

1)您没有设置的UITableView的

Solution - `self.tableview.delegate = self` 

2委托)检查用户交互是没有禁止的UITableView的或UITableViewCell的

Solution: self.tableview.isUserInteractionEnabled = true 

3)。检查tableview选择样式是否不是none

Solution: self.tableview.allowsSelection = true 

4)检查是否有任何手势未启用。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
    }