2015-06-18 18 views
14

UITextField'un şu anda etkin olduğunu anlayamıyorum, bu nedenle UIBarButtonItem numaralı telefondan iptal edildiyse metnini temizleyebilirim. İşte benim kodum. UIPickerView, UIToolBar ve iki bar düğme öğesiyle bir görünüm vardır. İptal öğesinin yalnızca metnini temizleyecek bir eylemi vardır, ancak doğru UITextField'u nasıl alacağımı anlayamıyorum.Hangi textfield'ın etkin olduğu belirlenir nasıl olur

@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 
} 

Ve:

@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 
} 

cevap

27

Sınıfınızda bir UITextField özelliği bildirebilir ve geçerli metin alanını textFieldDidBeginEditing içinde atayabilirsiniz. Ardından, gerektiğinde bu metin alanını aramanız yeterlidir. hızlı 4'te

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") 
    } 
} 
+0

Bunu kullanabilir miyim ve sonra UIBarButtonItem Eyleminde sadece clearText (self.activeTextField) deyin mi? – Suzukijak3

+0

Evet, bunu yapabilirdiniz. – Randy

+0

Tamam Sadece denedim ve hata yok ama metin sıfırlanacak şekilde ayarlanmadı. { self.activeTextfield = textField } @IBAction fonk cancelText (gönderen: AnyObject) { println ("eylem ateş") self.activeTextfield: Bu zaman kodu, 'işlev textFieldDidBeginEditing (UITextField textField) 'dir. text = nil self.pickerView.hidden = doneText fonk gerçek } @IBAction: = true } 'senin' cancelText (...) 'yöntemde – Suzukijak3

0

Kullanım temsilci:

Bunları hem denedim aktif textfield düzenleme tamamlandığında

optional func textFieldDidEndEditing(_ textField: UITextField) 

Bu söyleyecektir ve textField, artık aktif olmayacak olana bir işaretçi içerecektir.

+0

gibi diyoruz o

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 }} 

ve benzeri aktif UITextField alabilirsiniz Bunu bu eyleme nasıl uygulayacağınıza dair bir örnek? – Suzukijak3

+1

Delege yöntemlerini nasıl uygulayacağınızı öğrenmenizi öneririz. Bunu anlamasanız, Kakao API'sı ile sorun yaşamayacaksınız. – Almo

+0

Bazı delege yöntemlerini uyguluyorum ancak çabucak yeniyim, bu yüzden bulmacanın tüm parçalarına sahip değilim, ancak bir çekim yapacağım. – Suzukijak3

0
/// Finds the textField that is the first responder in a view hierarchy 
func findActiveTextField(in subviews: [UIView], textField: inout UITextField?) { 

    guard textField == nil else { return } 

    for view in subviews { 
     if let tf = view as? UITextField, view.isFirstResponder { 
      textField = tf 
      break 
     } 
     else if !view.subviews.isEmpty { 
      findActiveTextField(in: view.subviews, textField: &textField) 
     } 
    } 
} 

// Usage 
var aView: UIView = UIView() 
var activeField : UITextField? 
findActiveTextField(in: aView.subviews, textField: &activeField) 
+0

'Çözümlenmemiş tanımlayıcı 'activeField' kullanımı lütfen bunu düzeltin –

1

:

o zaman bana verebilir o

let current = view.getSelectedTextField() 
İlgili konular