2017-03-06 3 views
1

Ich benutze zwei textField, die vom Typ numPad Tastatur ist. Ich habe Next Schaltfläche für die erste TextField und Done Schaltfläche für die zweite TextField in der NumPad Tastatur hinzugefügt. Verwenden Sie den folgenden Code.Wie bekomme ich die textField-ID in 'doneButtonAction' -Methode, während ich mehrere Textfelder mit numPad-Tastatur in swift verwende?

import UIKit 

class SecurityPinSettingsVC: UIViewController, UITextFieldDelegate 
{ 
@IBOutlet weak var textField1: UITextField! 
    @IBOutlet weak var textField2: UITextField! 
override func viewDidLoad() 
    { 
     super.viewDidLoad()  
     self.textField1.delegate = self 
     self.textField2.delegate = self 
     self.textField1.textAlignment = NSTextAlignment.center 
     self.textField2.textAlignment = NSTextAlignment.center 
     addNextButtonOnKeyboard() 
     addDoneButtonOnKeyboard()   
    } 
func addNextButtonOnKeyboard() 
    { 
     let nextToolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0,y: 0, width: 320, height: 50)) 
     nextToolbar.barStyle  = UIBarStyle.default 
     let flexSpace    = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 
     let next: UIBarButtonItem = UIBarButtonItem(title: "Next", style: UIBarButtonItemStyle.done, target: self, action: #selector(ViewController.doneButtonAction)) 


     var items = [UIBarButtonItem]() 
     items.append(flexSpace) 
     items.append(next) 

     nextToolbar.items = items 
     nextToolbar.sizeToFit() 

     self.textField1.inputAccessoryView = nextToolbar 
    } 



    func addDoneButtonOnKeyboard() 
    { 
     let doneToolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 50)) 
     doneToolbar.barStyle  = UIBarStyle.default 
     let flexSpace    = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 
     let ddone: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(ViewController.doneButtonAction)) 

     var items = [UIBarButtonItem]() 
     items.append(flexSpace) 
     items.append(ddone) 

     doneToolbar.items = items 
     doneToolbar.sizeToFit() 

       self.textField2.inputAccessoryView = doneToolbar 
    } 
func doneButtonAction() 
{ 
     //self.textField2.becomeFirstResponder() 
     //self.textField2.resignFirstResponder() 
} 

} 

Beide Schaltflächen wurden erfolgreich hinzugefügt. Das Problem ist, ich konnte keine separaten Aktionsmethoden für Next Schaltfläche und Done Schaltfläche erstellen. Es akzeptiert nur doneButtonAction Methode für beide Tasten, die ich erstellt und in früheren ViewControllern verwendet habe. Also, wie bekomme ich die TextField ID in der Methode, um zu wissen, auf welche Schaltfläche geklickt wird. Klicken Sie also auf Next Schaltfläche Ich möchte TextField2 zu Ersthelfer werden, und durch Klicken auf Done Schaltfläche möchte ich TextField2 First Responder zurücktreten.

Wie in normalen TextField, textFieldShouldReturn Methode wird diesen Job leicht tun, wo das TextField-Objekt an diese Funktion als Argument übergeben wird. Wie können wir das textField-Objekt an die doneButtonAction-Methode übergeben?

Ich bin mit Xcode 8.2, Swift 3.0

vielen Dank im Voraus.

+0

diese Bibliothek ausprobiert worden ist, wirklich nützlich, nicht alles codieren müssen -> pod ‚IQKeyboardManager‘ –

+0

Ist es möglich, in Ihrem Fall 'sender' hinzufügen zur 'doneButtonAction'? – kelin

Antwort

2

Sie Textfeld bekommen, die Responder

if textField1.isFirstResponder { 
    // textfield 1 is becomeResponder 
} 
+0

Danke. Es klappt. – Tester

Verwandte Themen