2016-06-30 26 views
5

Ho la configurazione del decimale nella mia app, ma come faccio a ignorare questa tastiera? Come posso ottenere un reso o una chiave di ritorno? Ho provato UIReturnKeyType.Done ma questo non ha mostrato nulla.Come aggiungere una chiave di ritorno su un decimale in Swift?

Something like this

Qualcosa del genere

+0

su un iPad è possibile aggiungere alla barra nella parte superiore della tastiera, ma su altro i dispositivi le tue opzioni sono limitate. Vorrei aggiungere un pulsante che appare su di esso o costruire una tastiera personalizzata – Sethmr

risposta

2
class ViewController: UIViewController { 

    let textField = UITextField(frame: CGRect(x: 0, y: 20, width: 200, height: 60)) 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     textField.borderStyle = .Line 
     textField.inputAccessoryView = accessoryView() 
     textField.inputAccessoryView?.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 44) 
     view.addSubview(textField) 
    } 

    func accessoryView() -> UIView { 

     let view = UIView() 
     view.backgroundColor = UIColor.redColor() 

     let doneButton = UIButton() 
     doneButton.frame = CGRect(x: self.view.frame.width - 80, y: 7, width: 60, height: 30) 
     doneButton.backgroundColor = UIColor.greenColor() 
     doneButton.setTitle("done", forState: .Normal) 
     doneButton.addTarget(self, action: #selector(ViewController.doneAction), forControlEvents: .TouchUpInside) 
     view.addSubview(doneButton) 

     return view 

    } 

    @objc func doneAction() { 
     textField.resignFirstResponder() 
    } 
} 

enter image description here

+0

Non ho nemmeno fatto riferimento alla mia domanda .. –

+0

sì, perché non posso risolvere questa domanda. Io uso un altro modo. – maquannene

+0

@AmitNivedanKalra probabilmente dovresti spiegare cosa hai fatto qui se stai dando una soluzione alternativa ... – penatheboss

7

Questa soluzione ha funzionato per me =)

Fonte: https://gist.github.com/jplazcano87/8b5d3bc89c3578e45c3e

ho fatto un'estensione per l'interfaccia utente TextField e ora posso avere una "Done Bar" su tutte le tastiere che voglio.

extension UITextField{ 

func addDoneButtonToKeyboard(myAction:Selector?){ 
    let doneToolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 300, height: 40)) 
    doneToolbar.barStyle = UIBarStyle.default 

    let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 
    let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: myAction) 

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

    doneToolbar.items = items 
    doneToolbar.sizeToFit() 

    self.inputAccessoryView = doneToolbar 
} 
} 

MyViewController

class myViewController:UIViewController,UITextFieldDelegate{ 

    //MARK: - Outlets 
    @IBOutlet weak var myTextField: UITextField! 

    //MARK: - Life Cycle 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     myTextField.delegate = self 

    //You can specify your own selector to be send in "myAction" 
    myTextField.addDoneButtonToKeyboard(myAction: #selector(self.myTextField.resignFirstResponder)) 
    } 
} 

This is the result

+0

Questa è di gran lunga la soluzione più bella che abbia mai visto! – user1700737

5

Qui è un Swift 3 soluzione utilizzando un'estensione. Ideale se nella tua applicazione sono presenti diversi oggetti numerici UITextField in quanto consente di decidere, per ogni UITextField, se eseguire un'azione personalizzata quando Fine o Cancella viene toccato.

enter image description here

// 
// UITextField+DoneCancelToolbar.swift 
// 

import UIKit 

extension UITextField { 
    func addDoneCancelToolbar(onDone: (target: Any, action: Selector)? = nil, onCancel: (target: Any, action: Selector)? = nil) {  
     let onCancel = onCancel ?? (target: self, action: #selector(cancelButtonTapped)) 
     let onDone = onDone ?? (target: self, action: #selector(doneButtonTapped)) 

     let toolbar: UIToolbar = UIToolbar() 
     toolbar.barStyle = .default 
     toolbar.items = [ 
      UIBarButtonItem(title: "Cancel", style: .plain, target: onCancel.target, action: onCancel.action), 
      UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil), 
      UIBarButtonItem(title: "Done", style: .done, target: onDone.target, action: onDone.action) 
     ] 
     toolbar.sizeToFit() 

     self.inputAccessoryView = toolbar 
    } 

    // Default actions: 
    func doneButtonTapped() { self.resignFirstResponder() } 
    func cancelButtonTapped() { self.resignFirstResponder() } 
} 

Esempio di utilizzo con le azioni predefinite:

// 
// MyViewController.swift 
// 

@IBOutlet weak var myNumericTextField: UITextField! { 
    didSet { myNumericTextField?.addDoneCancelToolbar() } 
} 

Esempio di utilizzo con un costume Fatto azione:

// 
// MyViewController.swift 
// 

@IBOutlet weak var myNumericTextField: UITextField! { 
    didSet { 
     myNumericTextField?.addDoneCancelToolbar(onDone: (target: self, action: #selector(doneButtonTappedForMyNumericTextField))) 
    } 
} 

func doneButtonTappedForMyNumericTextField() { 
    print("Done"); 
    myNumericTextField.resignFirstResponder() 
}