我在另一个视图中有一个UITableView。每当我点击表格中的一个单元格时,我希望该单元格被突出显示,直到再次单击它以取消选择它。使用didSelectRowAtIndexPath方法,我完成了这个。但是,细胞选择需要很长时间。我必须按住一个单元格3秒才能突出显示单元格,而不是瞬间。如何在触摸瞬间选择单元格?
这是我的相关代码。
class AddDataViewController : UIViewController {
@IBOutlet weak var locationTableView: UITableView!
var fstViewController : FirstViewController?
let locationTableViewController = LocationTableViewController()
override func viewWillAppear(animated: Bool) {
// Set the data source and delgate for the tables
self.locationTableView.delegate = self.locationTableViewController
self.locationTableView.dataSource = self.locationTableViewController
// Set the cell separator style of the tables to none
self.locationTableView.separatorStyle = UITableViewCellSeparatorStyle.None
// Refresh the table
self.locationTableView.reloadData()
}
override func viewDidLoad(){
super.viewDidLoad()
// Create a tap gesture recognizer for dismissing the keyboard
let tapRecognizer = UITapGestureRecognizer()
// Set the action of the tap gesture recognizer
tapRecognizer.addTarget(self, action: "dismissKeyboard")
// Add the tap gesture recognizer to the view
//self.view.addGestureRecognizer(tapRecognizer)
}
}
class LocationTableViewController : UITableViewController, UITableViewDelegate, UITableViewDataSource {
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return tableView.frame.height / 5
}
override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
override func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.backgroundColor = UIColor.greenColor()
}
override func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.backgroundColor = UIColor.whiteColor()
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.backgroundColor = UIColor.blueColor()
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCellStyle.Value2, reuseIdentifier: "addDataCell")
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.textLabel!.text = "Test"
return cell
}
}
答案 0 :(得分:2)
问题是UITapGestureRecognizer干扰了细胞的敲击。我很抱歉,我的初始帖子中没有点击手势代码,因为我没有意识到这可能是罪魁祸首。我已将其添加到原始帖子的代码段中。
答案 1 :(得分:1)
这应该可行但是制作自定义单元子类会更加清晰。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCellStyle.Value2, reuseIdentifier: "addDataCell")
cell.textLabel!.text = "Test"
let backgroundView = UIView()
backgroundView.backgroundColor = YOUR_COLOR
cell.selectedBackgroundView = backgroundView
return cell
}
删除,因为我们想要选择单元格
cell.selectionStyle = UITableViewCellSelectionStyle.None
删除,因为已经在细胞子类
中处理了这个问题override func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.backgroundColor = UIColor.greenColor()
}
override func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.backgroundColor = UIColor.whiteColor()
}
答案 2 :(得分:0)
我的信誉点不足,无法回复@ Jason247,因此请输入答案。他是对的。单元格注册点击时出现延迟,我遇到了同样的问题。注释掉UITapGestureRecognizer,然后延迟消失了。
在我的上下文中,我正在使用UISearchBar。我用搜索栏的可选委托方法替换了UITapGestureRecognizer:
class ViewController: UIViewController, UISearchBarDelegate{
func searchBarSearchButtonClicked(searchBar: UISearchBar)
{
self.mySearchBar.endEditing(true)
}
}
您可以找到更多使用UISearchBar here时解散键盘的解决方案