reloadRowsAtIndexPaths
, UITextField
resignFirstResponder
, , , : .. .
, beginUpdates()
endUpdates()
, , scrollEnabled
UITextView
, textViewDidChange
.
textViewDidChange
, , .
UITableViewCell
:
class TableViewTextViewCell : UITableViewCell, UITextViewDelegate {
var refreshCell:(() -> Void)? = nil
var textViewDirtyCount = 0
// MARK: - UITextViewDelegate
func textViewDidChange(_ textView: UITextView) {
textViewDirtyCount += 1
perform(#selector(TableViewTextViewCell.queuedTextVewDidChange),
with: nil,
afterDelay: 0.3) // Wait until typing stopped
}
func textViewDidBeginEditing(_ textView: UITextView) {
textViewDirtyCount = 0 // initialize queuedTextVewDidChange
}
func textViewDidEndEditing(_ textView: UITextView) {
textViewDirtyCount = -1 // prevent any further queuedTextVewDidChange
}
func queuedTextVewDidChange() {
if textViewDirtyCount > 0 {
textViewDirtyCount -= 1
if 0 == textViewDirtyCount, let refreshCell = refreshCell {
refreshCell()
}
}
}
}
:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(
"cell", forIndexPath: indexPath) as! TableViewTextViewCell
cell.refreshCell = {
() -> Void in
tableView.beginUpdates()
tableView.endUpdates()
}
return cell
}
0,3 ; 0,3 , . .

↻
► GitHub .