Various fixes

This commit is contained in:
Ilya Laktyushin 2021-02-17 19:07:43 +04:00
parent 8fe68fd1ed
commit 385e212f3f
2 changed files with 45 additions and 2 deletions

View File

@ -935,8 +935,9 @@ private class TimeInputView: UIView, UIKeyInput {
return result return result
} }
var didReset = false var length: Int = 4
private var didReset = false
private let nonDigits = CharacterSet.decimalDigits.inverted private let nonDigits = CharacterSet.decimalDigits.inverted
func insertText(_ text: String) { func insertText(_ text: String) {
if text.rangeOfCharacter(from: nonDigits) != nil { if text.rangeOfCharacter(from: nonDigits) != nil {
@ -948,7 +949,7 @@ private class TimeInputView: UIView, UIKeyInput {
} }
var updatedText = self.text var updatedText = self.text
updatedText.append(text) updatedText.append(text)
self.text = updatedText self.text = String(updatedText.suffix(length))
self.textUpdated?(self.text) self.textUpdated?(self.text)
} }
@ -964,6 +965,20 @@ private class TimeInputView: UIView, UIKeyInput {
} }
private class TimeInputNode: ASDisplayNode { private class TimeInputNode: ASDisplayNode {
var length: Int {
get {
if let view = self.view as? TimeInputView {
return view.length
} else {
return 4
}
}
set {
if let view = self.view as? TimeInputView {
view.length = newValue
}
}
}
var text: String { var text: String {
get { get {
if let view = self.view as? TimeInputView { if let view = self.view as? TimeInputView {
@ -1395,6 +1410,8 @@ private final class TimePickerNode: ASDisplayNode {
self.hoursNode.isHidden = false self.hoursNode.isHidden = false
self.minutesNode.isHidden = false self.minutesNode.isHidden = false
} }
self.inputNode.length = 2
case .minutes: case .minutes:
colonColor = self.theme.textColor colonColor = self.theme.textColor
self.colonNode.alpha = 0.35 self.colonNode.alpha = 0.35
@ -1422,6 +1439,8 @@ private final class TimePickerNode: ASDisplayNode {
self.hoursNode.isHidden = false self.hoursNode.isHidden = false
self.minutesNode.isHidden = false self.minutesNode.isHidden = false
} }
self.inputNode.length = 2
case .all: case .all:
colonColor = self.theme.accentColor colonColor = self.theme.accentColor
self.colonNode.alpha = 1.0 self.colonNode.alpha = 1.0
@ -1449,6 +1468,8 @@ private final class TimePickerNode: ASDisplayNode {
self.hoursNode.isHidden = false self.hoursNode.isHidden = false
self.minutesNode.isHidden = false self.minutesNode.isHidden = false
} }
self.inputNode.length = 4
} }
if let size = self.validLayout { if let size = self.validLayout {

View File

@ -487,6 +487,10 @@ public class ItemListSingleLineInputItemNode: ListViewItemNode, UITextFieldDeleg
var text = textField.text ?? "" var text = textField.text ?? ""
text.replaceSubrange(text.index(text.startIndex, offsetBy: range.lowerBound) ..< text.index(text.startIndex, offsetBy: range.upperBound), with: result) text.replaceSubrange(text.index(text.startIndex, offsetBy: range.lowerBound) ..< text.index(text.startIndex, offsetBy: range.upperBound), with: result)
textField.text = text textField.text = text
if case .username = item.type {
text = text.folding(options: .diacriticInsensitive, locale: .current).replacingOccurrences(of: " ", with: "_")
textField.text = text
}
if let startPosition = textField.position(from: textField.beginningOfDocument, offset: range.lowerBound + result.count) { if let startPosition = textField.position(from: textField.beginningOfDocument, offset: range.lowerBound + result.count) {
let selectionRange = textField.textRange(from: startPosition, to: startPosition) let selectionRange = textField.textRange(from: startPosition, to: startPosition)
DispatchQueue.main.async { DispatchQueue.main.async {
@ -497,6 +501,24 @@ public class ItemListSingleLineInputItemNode: ListViewItemNode, UITextFieldDeleg
return false return false
} }
} }
if let item = self.item, case .username = item.type {
let cleanString = string.folding(options: .diacriticInsensitive, locale: .current).replacingOccurrences(of: " ", with: "_")
if cleanString != string {
var text = textField.text ?? ""
text.replaceSubrange(text.index(text.startIndex, offsetBy: range.lowerBound) ..< text.index(text.startIndex, offsetBy: range.upperBound), with: cleanString)
textField.text = text
if let startPosition = textField.position(from: textField.beginningOfDocument, offset: range.lowerBound + cleanString.count) {
let selectionRange = textField.textRange(from: startPosition, to: startPosition)
DispatchQueue.main.async {
textField.selectedTextRange = selectionRange
}
}
self.textFieldTextChanged(textField)
return false
}
}
return true return true
} }