Swift:UITableViewCell选择延迟

时间:2015-06-24 01:45:59

标签: ios swift uitableview

我在另一个视图中有一个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
    }
}

3 个答案:

答案 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时解散键盘的解决方案