当textFieldDidBeginEditing中的tableView.reloadData()时,键盘不显示

时间:2018-02-19 10:30:04

标签: ios swift

我将UITextField置于UITableViewCell内,并希望突出显示tableViewCell,如果用户在每个tableViewCell内键入,则取消选中的UITextField将成为原始颜色。所以,我确实喜欢这样。

func textFieldDidBeginEditing(_ textField: UITextField) {
    defaultIndex = textField.tag
    dynamicFormTable.reloadData()
}

但是当我添加dynamicFormTable.reloadData()时,问题是键盘没有显示。请让我知道如何解决它。感谢。

2 个答案:

答案 0 :(得分:1)

以下代码将给出良好的结果,以避免重新加载

var cellBGColr = [Int : UIColor]()
var previouselectedRow = [Int]()

override func viewDidLoad() {
    super.viewDidLoad()
    for i in 0..<70 // numberOfRows
    {
       cellBGColr[i] = UIColor.white
    }
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return 70
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "table", for: indexPath) as! TblTableViewCell

    cell.backgroundColor = cellBGColr[indexPath.row]
    cell.selectionStyle = .none
    return cell
}
func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {

    let cellPosition = textView.superview?.convert(CGPoint.zero, to: tblView)
    let indPath : IndexPath = tblView.indexPathForRow(at: cellPosition!)!

    let cell = tblView.cellForRow(at: indPath) as! TblTableViewCell

    var previousSelectedCellRow : Int = -1 // FOR VALIDATION

    if previouselectedRow.count == 0 // FIRST EDIT
    {
        previouselectedRow.append(indPath.row)
    }
    else
    {
        previousSelectedCellRow = previouselectedRow[0]

        if previousSelectedCellRow == indPath.row // SAME ROW EDITING AGAIN
        {

        }
        else  // NEW ROW
        {
            let previousIndPath : IndexPath = IndexPath(row: previousSelectedCellRow, section: 0)

            if (tblView.indexPathsForVisibleRows?.contains(previousIndPath))!
            {
                let previousCell = tblView.cellForRow(at: previousIndPath) as! TblTableViewCell

                previousCell.backgroundColor = UIColor.white

                cellBGColr[previousSelectedCellRow] = UIColor.white

            }
            else
            {
                cellBGColr[previousSelectedCellRow] = UIColor.white
            }

            previouselectedRow.remove(at: 0)
            previouselectedRow.append(indPath.row)

        }
    }

    cell.backgroundColor = UIColor.red // HERE YOU CAN CHANGE UR CELL COLOR

    cellBGColr[indPath.row] = UIColor.red // HERE STORED IN DICT
    return true
}

在滚动桌面视图或尝试重新加载的某个位置时,单元格背景颜色不会更改/重复使用。

答案 1 :(得分:0)

当调用reloadData时,它会终止第一个响应者。但您可以使用beginUpdates / endUpdates方法:

dynamicFormTable.beginUpdates()
dynamicFormTable.reloadRows(at: [IndexPath(row: defaultIndex, section: 0)], with .none)
dynamicFormTable.endUpdates()