genannt Ich habe eine einfache UITableViewController
mit 6 Zeilen, jeweils mit einem UITextField
. Ich möchte in der Lage sein, auf jede Zeile zu klicken und die Tastatur auf jede Zeile anwenden zu lassen. Alles funktioniert, außer aus irgendeinem Grund muss ich zweimal auf jede Reihe klicken, um den Responder dazu zu bringen, die nächste UITextField
aktiv zu machen. Ich legte UITextFieldDelegate
Ausdrucke und die Reihenfolge ihrer Aktionen scheint falsch. Jeder der TextFields
wurde mit 0 - 5 markiert. Wenn ich den ersten auswähle, gibt es kein Problem, die Tastatur kommt hoch, ich gebe etwas ein. Mein Ausdruck ist:textFieldSouldBeginEditing aufgerufen, textFieldDidBeginEditing nicht
textFieldShouldBeginEditing tag: 0 textFieldDidBeginEditing tag: 0
Dann wähle ich die nächste Zeile (ohne in der Tastatur auf Fertig hitting) und der Ausdruck ist dies:
textFieldShouldBeginEditing tag: 1 textFieldShouldEndEditing tag: 0 textFieldDidEndEditing tag: 0
Warum ist textFieldDidBeginEditing
nicht genannt zu werden?
Hier ist mein Code, falls es hilft:
class EstimateCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var estimateField: UITextField!
// callback to alert when user clicked "Done"
var doneTextFieldInput: ((cell: EstimateCell, newText:String?) -> Void)?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
// self.selectionStyle = .None
estimateField.delegate = self
estimateField.clearsOnBeginEditing = true
// add a done button to the numberpad
addDoneButtonOnNumpad(estimateField)
// add some padding to the right margin
estimateField.layer.sublayerTransform = CATransform3DMakeTranslation(-20, 0, 0)
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
/**
Only allow 4 digits
*/
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// only allow 4 digits max
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
let isMax4digits = newLength <= 5
return isMax4digits
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
print("textFieldShouldBeginEditing \(textField.tag)")
return true
}
func textFieldDidBeginEditing(textField: UITextField) {
textField.text = ""
print("textFieldDidBeginEditing \(textField.tag)")
}
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
print("textFieldShouldEndEditing \(textField.tag)")
return true
}
/**
Called after the textfield resigns as the first responder
*/
func textFieldDidEndEditing(textField: UITextField) {
print("textFieldDidEndEditing \(textField.tag)")
doneTextFieldInput?(cell: self, newText: textField.text)
// textField.resignFirstResponder()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
print("textFieldShouldReturn")
textField.resignFirstResponder()
return true
}
/**
Adds a toolbar with a Done button as an input accessory view to the given textfield. Calls
resignFirstResponder when Done is clicked.
*/
func addDoneButtonOnNumpad(textField: UITextField)
{
let keypadToolbar: UIToolbar = UIToolbar()
// add a done button to the numberpad
keypadToolbar.items=[
UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: textField, action: #selector(UITextField.resignFirstResponder)),
UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil)
]
keypadToolbar.sizeToFit()
// add a toolbar with a done button above the number pad
textField.inputAccessoryView = keypadToolbar
}
}
versuchen Sie mit dem Entfernen von Code aus watchFromNib() Methode estimateField.clearsOnBeginEditing = true – Harish
Leider hat das nicht getan. Danke für den Versuch! Mein einziger anderer Gedanke ist eine Änderung an einem UIViewController und ein UITableView hinein und versuchen Sie es so. Der Grund, warum ich das nicht getan habe, ist, die automatische Bildlauffunktion zu bekommen, wenn eines der unteren Textfelder ausgewählt wird. – Coder1224
Danke für die schnelle Überprüfung und viel Glück @ Coder1224 – Harish