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

View File

@ -487,6 +487,10 @@ public class ItemListSingleLineInputItemNode: ListViewItemNode, UITextFieldDeleg
var text = textField.text ?? ""
text.replaceSubrange(text.index(text.startIndex, offsetBy: range.lowerBound) ..< text.index(text.startIndex, offsetBy: range.upperBound), with: result)
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) {
let selectionRange = textField.textRange(from: startPosition, to: startPosition)
DispatchQueue.main.async {
@ -497,6 +501,24 @@ public class ItemListSingleLineInputItemNode: ListViewItemNode, UITextFieldDeleg
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
}