如何确定哪个文本字段是活跃的

Sha*_*ak3 28 ios swift

我无法弄清楚哪些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)


Vya*_*lav 8

为了提高@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