UITableView как входное представление для UITextField didSelectRowAtIndexPath случайно не сработало

У меня есть UITableViewController, который я использую для переопределения inputView подкласса UITextField. Иногда tableView didSelectRowAtIndexPath перестает срабатывать, пока пользователь не свернет таблицу и не попытается снова щелкнуть. Я не могу понять, что может привести к тому, что клетки перестанут отвечать на запросы. Большую часть времени он работает отлично, но случайным образом ячейки перестают реагировать на прикосновения, пока пользователь не прокручивает представление таблицы немного.

У меня нет никаких TapGestureRecognizer в представлении моих знаний, и я поиграл с переопределением HitTest в UITableViewCell, но, похоже, не могу решить проблему.

Любые идеи о том, как лучше отладить это?

Вот код контроллера 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 ответ

У меня была такая же проблема. В моем представлении таблицы это был не самый последний ряд моей таблицы при первом нажатии. Это подчеркивает это, но didSelectRowAtIndexPath не вызывается. Все остальные ряды работают нормально. Но если я включу отскок таблицы, то, похоже, это решит проблему

введите описание изображения здесь

Также попробуйте удалить Show Selection on Touch в Интерфейсном Разработчике следующим образом: введите описание изображения здесь

Надеюсь, поможет

Другие вопросы по тегам