我无法弄清楚哪些UITextField
是当前活动的,所以我可以清除它的文本,如果他们点击取消UIBarButtonItem
.这是我的代码.有一个视图UIPickerView
,UIToolBar
和两个栏按钮的项目.取消项目有一个动作,只会清除其文本我无法弄清楚如何得到正确的UITextField
.
我试过这两个:
@IBAction func cancelText(sender: AnyObject) {
if self.truckYear.editing == true{
println("truckYear")
clearText(self.truckYear)
} else if self.truckMake.editing == true{
clearText(self.truckMake)
}
}
@IBAction func doneText(sender: AnyObject) {
pickerView.hidden = true
}
func clearText(textField:UITextField){
println("in clear text")
textField.text = nil
}
Run Code Online (Sandbox Code Playgroud)
和:
@IBAction func cancelText(sender: AnyObject) {
if self.truckYear.isFirstResponder(){
println("truckYear")
clearText(self.truckYear)
} else if self.truckMake.isFirstResponder(){
clearText(self.truckMake)
}
}
@IBAction func doneText(sender: AnyObject) {
pickerView.hidden = true
}
func clearText(textField:UITextField){
println("in clear text")
textField.text = nil
}
Run Code Online (Sandbox Code Playgroud)
Ran*_*ndy 43
您可以UITextField
在类中声明属性,并将当前文本字段分配给它textFieldDidBeginEditing
.然后,您可以随时调用此文本字段.
class ViewController : UIViewController, UITextFieldDelegate {
var activeTextField = UITextField()
// Assign the newly active text field to your activeTextField variable
func textFieldDidBeginEditing(textField: UITextField) {
self.activeTextField = textField
}
// Call activeTextField whenever you need to
func anotherMethod() {
// self.activeTextField.text is an optional, we safely unwrap it here
if let activeTextFieldText = self.activeTextField.text {
print("Active text field's text: \(activeTextFieldText)")
return;
}
print("Active text field is empty")
}
}
Run Code Online (Sandbox Code Playgroud)
Rei*_*ill 17
在快速4:
你可以像这样得到活跃的UITextField
extension UIView {
func getSelectedTextField() -> UITextField? {
let totalTextFields = getTextFieldsInView(view: self)
for textField in totalTextFields{
if textField.isFirstResponder{
return textField
}
}
return nil
}
func getTextFieldsInView(view: UIView) -> [UITextField] {
var totalTextFields = [UITextField]()
for subview in view.subviews as [UIView] {
if let textField = subview as? UITextField {
totalTextFields += [textField]
} else {
totalTextFields += getTextFieldsInView(view: subview)
}
}
return totalTextFields
}}
Run Code Online (Sandbox Code Playgroud)
然后你就这样称呼它
let current = view.getSelectedTextField()
Run Code Online (Sandbox Code Playgroud)
为了提高@Reimond的答案Swift 4
extension UIView {
var textFieldsInView: [UITextField] {
return subviews
.filter ({ !($0 is UITextField) })
.reduce (( subviews.compactMap { $0 as? UITextField }), { summ, current in
return summ + current.textFieldsInView
})
}
var selectedTextField: UITextField? {
return textFieldsInView.filter { $0.isFirstResponder }.first
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
view.selectedTextField
归档时间: |
|
查看次数: |
31751 次 |
最近记录: |