UITableView作为UITextField的inputView,随机未触发的didSelectRowAtIndexPath

时间:2015-12-17 18:54:45

标签: swift uitableview uitextfield didselectrowatindexpath

我有一个UITableViewController,我用它来覆盖UITextField子类的inputView。有时tableView didSelectRowAtIndexPath会停止被触发,直到用户篡改表并尝试再次单击。我似乎无法解决导致细胞无反应的原因。大多数时候它工作得很好,但随机细胞停止响应触摸,直到用户滚动tableview一点。

根据我的知识,我没有任何TapGestureRecognizer,并且已经在UITableViewCell中使用了重写HitTest,但似乎无法弄清楚问题。

关于如何更好地调试这个的任何想法?

这是tableView控制器代码:

protocol MultiSelectPickerDelegate
{
    func didSelectOption(optionIndex:Int, group:Int)
}

class MultiSelectPicker: UITableViewController {

    var multiSelectGroups = [MultiSelectGroup](){
        didSet{
            self.tableView.reloadData()
        }
    }


    var delegate:MultiSelectPickerDelegate?

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return multiSelectGroups.count

    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return multiSelectGroups[section].multiSelectOptions.count
    }


    //MARK: UITableView datasourse function
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        delegate?.didSelectOption(indexPath.row, group: indexPath.section)
    }

    override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = UIView(frame: CGRectMake(0, 0, tableView.frame.size.width, 40))
        let label = UILabel(frame: CGRectMake(10, 0, tableView.frame.size.width, 40))
        label.font = UIFont.systemFontOfSize(14)
        label.text = multiSelectGroups[section].name
        label.textColor = UIColor.whiteColor()
        view.addSubview(label)
        view.backgroundColor = UIColor.MyAppBlue()
        return view

    }

    override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 40
    }

     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier")
        if cell == nil{
            cell = UITableViewCell(style: .Default, reuseIdentifier: "reuseIdentifier")
        }
        cell?.textLabel?.text = multiSelectGroups[indexPath.section].multiSelectOptions[indexPath.row].name
        return cell!
    }
}

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。在我的桌面视图中,它没有在第一次点击时点击我桌子的最后一行。它突出显示它,但没有调用didSelectRowAtIndexPath。所有其他行都可以正常工作。但是,如果我将tableview反弹,那么它似乎可以解决问题

enter image description here

还尝试在Interface Builder中删除Show Touch,如下所示: enter image description here

希望有所帮助