Cum de a arăta „Done“ buton de pe tastatura numerică pentru iPhone

voturi
208

Nu există nici un buton „Done“ de pe tastatura numerică. Atunci când un utilizator termină introducerea informațiilor numerice într-un câmp de text, cum pot face numărul pad dispar?

Am putea obține un buton „Done“, utilizând tastatura implicit, dar atunci utilizatorii ar trebui să treacă la tastele numerice pentru a introduce numere. Există o modalitate de a arăta un buton „Terminat“ de pe tastatura numerică?

Întrebat 25/02/2009 la 03:45
sursa de către utilizator
În alte limbi...                            


21 răspunsuri

voturi
321

O altă soluție. Perfect dacă există alte câmpuri de text non-pad numărul de pe ecran.

inputAccessoryView

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
    numberToolbar.barStyle = UIBarStyleBlackTranslucent;
    numberToolbar.items = @[[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)],
                         [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                         [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)]];
    [numberToolbar sizeToFit];
    numberTextField.inputAccessoryView = numberToolbar;
}

-(void)cancelNumberPad{
    [numberTextField resignFirstResponder];
    numberTextField.text = @"";
}

-(void)doneWithNumberPad{
    NSString *numberFromTheKeyboard = numberTextField.text;
    [numberTextField resignFirstResponder];
}
Publicat 08/07/2012 la 10:26
sursa de către utilizator

voturi
37

Aici este o adaptare pentru răspunsul Luda pentru Swift:

În declarația de subclasa pune dvs. UIViewController

let numberToolbar: UIToolbar = UIToolbar()

în ViewDidLoad a pus:

    numberToolbar.barStyle = UIBarStyle.BlackTranslucent
    numberToolbar.items=[
        UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Bordered, target: self, action: "hoopla"),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil),
        UIBarButtonItem(title: "Apply", style: UIBarButtonItemStyle.Bordered, target: self, action: "boopla")
    ]

    numberToolbar.sizeToFit()

    textField.inputAccessoryView = numberToolbar //do it for every relevant textfield if there are more than one 

și adăugați tamtamului și hoopla funcții (nu ezitați să alegeți alte nume, doar schimba numele selectorului în mod corespunzător ViewDidLoad

func boopla () {
    textField.resignFirstResponder()
}

func hoopla () {
    textField.text=""
    textField.resignFirstResponder()
}
Publicat 24/02/2015 la 22:24
sursa de către utilizator

voturi
14

Trucul l-am vazut folosit este de a face un buton personalizat transparent dimensiunea întregii vizualizare și apoi în metoda sa de clic, au câmpul de text demisioneze primul răspuns. Deci, utilizatorul poate face clic oriunde în afara câmpului pentru a respinge tastatura.

Publicat 25/02/2009 la 05:07
sursa de către utilizator

voturi
11

Soluția în UIKeyboardTypeNumberPad și tasta de întoarcere lipsă mare de lucrări , dar numai în cazul în care nu există alte non-numerice câmpuri de text pad pe ecran.

Am luat acest cod și a transformat-o într-o UIViewController pe care o puteți subclasa pur și simplu pentru a face numărul de tampoane funcționeze. Veți avea nevoie pentru a obține pictogramele din link-ul de mai sus.

NumberPadViewController.h:

#import <UIKit/UIKit.h>

@interface NumberPadViewController : UIViewController {
    UIImage *numberPadDoneImageNormal;
    UIImage *numberPadDoneImageHighlighted;
    UIButton *numberPadDoneButton;
}

@property (nonatomic, retain) UIImage *numberPadDoneImageNormal;
@property (nonatomic, retain) UIImage *numberPadDoneImageHighlighted;
@property (nonatomic, retain) UIButton *numberPadDoneButton;

- (IBAction)numberPadDoneButton:(id)sender;

@end

și NumberPadViewController.m:

#import "NumberPadViewController.h"

@implementation NumberPadViewController

@synthesize numberPadDoneImageNormal;
@synthesize numberPadDoneImageHighlighted;
@synthesize numberPadDoneButton;

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
    if ([super initWithNibName:nibName bundle:nibBundle] == nil)
        return nil;
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.0) {
        self.numberPadDoneImageNormal = [UIImage imageNamed:@"DoneUp3.png"];
        self.numberPadDoneImageHighlighted = [UIImage imageNamed:@"DoneDown3.png"];
    } else {        
        self.numberPadDoneImageNormal = [UIImage imageNamed:@"DoneUp.png"];
        self.numberPadDoneImageHighlighted = [UIImage imageNamed:@"DoneDown.png"];
    }        
    return self;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // Add listener for keyboard display events
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                    selector:@selector(keyboardDidShow:) 
                                                     name:UIKeyboardDidShowNotification 
                                                   object:nil];     
    } else {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(keyboardWillShow:) 
                                                     name:UIKeyboardWillShowNotification 
                                                   object:nil];
    }

    // Add listener for all text fields starting to be edited
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(textFieldDidBeginEditing:)
                                                 name:UITextFieldTextDidBeginEditingNotification 
                                               object:nil];
}

- (void)viewWillDisappear:(BOOL)animated {
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
        [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                        name:UIKeyboardDidShowNotification 
                                                      object:nil];      
    } else {
        [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                        name:UIKeyboardWillShowNotification 
                                                      object:nil];
    }
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:UITextFieldTextDidBeginEditingNotification 
                                                  object:nil];
    [super viewWillDisappear:animated];
}

- (UIView *)findFirstResponderUnder:(UIView *)root {
    if (root.isFirstResponder)
        return root;    
    for (UIView *subView in root.subviews) {
        UIView *firstResponder = [self findFirstResponderUnder:subView];        
        if (firstResponder != nil)
            return firstResponder;
    }
    return nil;
}

- (UITextField *)findFirstResponderTextField {
    UIResponder *firstResponder = [self findFirstResponderUnder:[self.view window]];
    if (![firstResponder isKindOfClass:[UITextField class]])
        return nil;
    return (UITextField *)firstResponder;
}

- (void)updateKeyboardButtonFor:(UITextField *)textField {

    // Remove any previous button
    [self.numberPadDoneButton removeFromSuperview];
    self.numberPadDoneButton = nil;

    // Does the text field use a number pad?
    if (textField.keyboardType != UIKeyboardTypeNumberPad)
        return;

    // If there's no keyboard yet, don't do anything
    if ([[[UIApplication sharedApplication] windows] count] < 2)
        return;
    UIWindow *keyboardWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];

    // Create new custom button
    self.numberPadDoneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.numberPadDoneButton.frame = CGRectMake(0, 163, 106, 53);
    self.numberPadDoneButton.adjustsImageWhenHighlighted = FALSE;
    [self.numberPadDoneButton setImage:self.numberPadDoneImageNormal forState:UIControlStateNormal];
    [self.numberPadDoneButton setImage:self.numberPadDoneImageHighlighted forState:UIControlStateHighlighted];
    [self.numberPadDoneButton addTarget:self action:@selector(numberPadDoneButton:) forControlEvents:UIControlEventTouchUpInside];

    // Locate keyboard view and add button
    NSString *keyboardPrefix = [[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2 ? @"<UIPeripheralHost" : @"<UIKeyboard";
    for (UIView *subView in keyboardWindow.subviews) {
        if ([[subView description] hasPrefix:keyboardPrefix]) {
            [subView addSubview:self.numberPadDoneButton];
            [self.numberPadDoneButton addTarget:self action:@selector(numberPadDoneButton:) forControlEvents:UIControlEventTouchUpInside];
            break;
        }
    }
}

- (void)textFieldDidBeginEditing:(NSNotification *)note {
    [self updateKeyboardButtonFor:[note object]];
}

- (void)keyboardWillShow:(NSNotification *)note {
    [self updateKeyboardButtonFor:[self findFirstResponderTextField]];
}

- (void)keyboardDidShow:(NSNotification *)note {
    [self updateKeyboardButtonFor:[self findFirstResponderTextField]];
}

- (IBAction)numberPadDoneButton:(id)sender {
    UITextField *textField = [self findFirstResponderTextField];
    [textField resignFirstResponder];
}

- (void)dealloc {
    [numberPadDoneImageNormal release];
    [numberPadDoneImageHighlighted release];
    [numberPadDoneButton release];
    [super dealloc];
}

@end

Bucurați-vă.

Publicat 05/08/2010 la 21:16
sursa de către utilizator

voturi
9

Mai jos este o revizuire a răspunsului Luda cu următoarele modificări:

  • vizualizarea accesorie este dimensionat automat la lățimea cadrului aplicației

  • constanta depreciați UIBarButtonItemStyleBorderedeste evitată

  • butonul „Done“ este instantiat ca UIBarButtonSystemItemDone

În prezent, butonul „Done“ este centrat în vizualizarea accesorii. Poate fi poziționat la stânga sau la dreapta ștergând spațiul de pe partea pertinentă.

Am omis un buton „Cancel“ , deoarece tastatura implicită nu are nici una. Dacă doriți un buton „Cancel“, vă sugerez să - l instantiate ca UIBarButtonSystemItemCancelși să vă asigurați că nu sunteți îndepărtând valoarea inițială în câmpul text. „Anulați“ comportament implementat în răspunsul Luda, care suprascrie valoarea cu un șir gol, nu poate fi ceea ce vrei.

- (void)viewDidLoad {
  [super viewDidLoad];
  float appWidth = CGRectGetWidth([UIScreen mainScreen].applicationFrame);
  UIToolbar *accessoryView = [[UIToolbar alloc]
                              initWithFrame:CGRectMake(0, 0, appWidth, 0.1 * appWidth)];
  UIBarButtonItem *space = [[UIBarButtonItem alloc]
                            initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                            target:nil
                            action:nil];
  UIBarButtonItem *done = [[UIBarButtonItem alloc]
                           initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                           target:self
                           action:@selector(selectDoneButton)];
  accessoryView.items = @[space, done, space];
  self.valueField.inputAccessoryView = accessoryView;
}

- (void)selectDoneButton {
  [self.valueField resignFirstResponder];
}

Pentru mai multe informații despre construirea vederi accesorii, consultați documentația Apple vizualizări personalizate pentru introducere de date . Veți dori , probabil , să se consulte paginile de referință privind UIToolbar și UIBarButtonItem , de asemenea.

Publicat 16/07/2015 la 10:16
sursa de către utilizator

voturi
6

O soluție mult mai ușor

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesBegan:touches withEvent:event];

    [textViewInstance1 resignFirstResponder];
    [textViewInstance2 resignFirstResponder];
    [textField resignFirstResponder];
}
Publicat 04/08/2011 la 12:01
sursa de către utilizator

voturi
6

Aici este cel mai recent cod. Pur și simplu includ #import "UIViewController + NumPadReturn.h" în viewController ta.

Aici este .h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface UIViewController (NumPadReturn)



@end

Și ei

#import "UIViewController+NumPadReturn.h"


@implementation UIViewController (NumPadReturn)

-(void) viewDidLoad{
    // add observer for the respective notifications (depending on the os version)
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(keyboardDidShow:) 
                                                     name:UIKeyboardDidShowNotification 
                                                   object:nil];     
    } else {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(keyboardWillShow:) 
                                                     name:UIKeyboardWillShowNotification 
                                                   object:nil];
    }

}


- (void)keyboardWillShow:(NSNotification *)note {
    // if clause is just an additional precaution, you could also dismiss it
    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 3.2) {
        [self addButtonToKeyboard];
    }
}

- (void)keyboardDidShow:(NSNotification *)note {
    // if clause is just an additional precaution, you could also dismiss it
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
        [self addButtonToKeyboard];
    }
}

- (void)addButtonToKeyboard {
    // create custom button
    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    doneButton.frame = CGRectMake(0, 163, 106, 53);
    doneButton.adjustsImageWhenHighlighted = NO;
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.0) {
        [doneButton setImage:[UIImage imageNamed:@"DoneUp3.png"] forState:UIControlStateNormal];
        [doneButton setImage:[UIImage imageNamed:@"DoneDown3.png"] forState:UIControlStateHighlighted];
    } else {        
        [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
        [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
    }
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
    // locate keyboard view
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    UIView* keyboard;
    for(int i=0; i<[tempWindow.subviews count]; i++) {
        keyboard = [tempWindow.subviews objectAtIndex:i];
        // keyboard found, add the button
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
            if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
                [keyboard addSubview:doneButton];
        } else {
            if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
                [keyboard addSubview:doneButton];
        }
    }
}

- (void)doneButton:(id)sender {
    NSLog(@"doneButton");
    [self.view endEditing:TRUE];
}



@end
Publicat 04/12/2010 la 21:57
sursa de către utilizator

voturi
5

Acest post pe forum descrie modul de a personaliza UIKeyboard pentru a adăuga afișarea personalizată pe tastatură.

Publicat 25/02/2009 la 05:48
sursa de către utilizator

voturi
3

SWIFT 3.0 Un gust diferit, folosind părți ale unor răspunsuri anterioare.

func addToolbarToNumberPad()
{
    let numberPadToolbar: UIToolbar = UIToolbar()

    numberPadToolbar.isTranslucent = true
    numberPadToolbar.items=[
        UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(self.cancelAction)),
        UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil),
        UIBarButtonItem(title: "Custom", style: .done, target: self, action: #selector(self.customAction)),
        UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.doneAction)),
    ]

    numberPadToolbar.sizeToFit()

    textField.inputAccessoryView = numberPadToolbar
}

func cancelAction()
{
    textField.resignFirstResponder()
}

func customAction()
{
    textField.resignFirstResponder()
}

func doneAction()
{
    textField.resignFirstResponder()
}

override func viewDidLoad()
{
    super.viewDidLoad()

    self.addToolbarToNumberPad()
}
Publicat 11/09/2017 la 11:41
sursa de către utilizator

voturi
3

O 3 Swift soluție folosind o extensie. Ideal dacă aveți mai multe numerice UITextFieldobiecte în aplicația dvs. , deoarece oferă flexibilitatea de a decide, pentru fiecare UITextField, fie pentru a efectua o acțiune personalizată atunci când Done sau Anulare este exploatat.

introduceți descrierea imaginii aici

//
//  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() }
}

Exemplu de utilizare folosind acțiuni implicite:

//
// MyViewController.swift
//

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

Exemplu de utilizare folosind un obicei Efectuat acțiune:

//
// MyViewController.swift
//

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

func doneButtonTappedForMyNumericTextField() { 
    print("Done"); 
    myNumericTextField.resignFirstResponder() 
}
Publicat 19/08/2017 la 11:40
sursa de către utilizator

voturi
2

Am găsit răspunsul @ user1258240 lui de a fi destul de concis , având în vedere acest lucru nu este la fel de simplu ca setarea unei returnKeyTypeproprietăți.

Am vrut doar să contribuie propria mea „re-utilizabilă“ de abordare a acestei:

func SetDoneToolbar(field:UITextField) {
    let doneToolbar:UIToolbar = UIToolbar()

    doneToolbar.items=[
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: self, action: nil),
        UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(ViewController.dismissKeyboard))
    ]

    doneToolbar.sizeToFit()
    field.inputAccessoryView = doneToolbar
}

override func viewDidLoad() {
    super.viewDidLoad()

    SetDoneToolbar(field: UITextField_1)
    SetDoneToolbar(field: UITextField_2)
    SetDoneToolbar(field: UITextField_3)
    SetDoneToolbar(field: UITextField_N)
}
Publicat 04/11/2016 la 05:34
sursa de către utilizator

voturi
2

Dacă aveți mai multe câmpuri numerice, sugerez subclasarea UITextField pentru a crea un NumericTextField care afișează întotdeauna o tastatură numerică cu un buton făcut. Apoi, pur și simplu asociați câmpurile numerice cu această clasă în Generatorul de interfață și nu va avea nevoie de nici un cod suplimentar în oricare dintre dvs. Vizualizați controlere. Următoarele este Swift 3.0 clasa pe care eu sunt, folosind în Xcode 8.0.

class NumericTextField: UITextField {
   let numericKbdToolbar = UIToolbar()

    // MARK: Initilization
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.initialize()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initialize()
    }

    // Sets up the input accessory view with a Done button that closes the keyboard
    func initialize()
    {
        self.keyboardType = UIKeyboardType.numberPad

        numericKbdToolbar.barStyle = UIBarStyle.default
        let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
        let callback = #selector(NumericTextField.finishedEditing)
        let donebutton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: callback)
        numericKbdToolbar.setItems([space, donebutton], animated: false)
        numericKbdToolbar.sizeToFit()
        self.inputAccessoryView = numericKbdToolbar
    }

    // MARK: On Finished Editing Function
    func finishedEditing()
    {
        self.resignFirstResponder()
    }
}
Publicat 02/10/2016 la 13:07
sursa de către utilizator

voturi
2

Putem face , de asemenea, „utilizator atins în altă parte“ soluție chiar mai simplu dacă le spunem vedere din vedere controler noastre de a pune capăt de editare:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
 { 
      [super touchesBegan:touches withEvent:event];

      [self.view endEditing:YES]; //YES ignores any textfield refusal to resign
 }

... presupunând că „atingând în altă parte respinge tastatura“ se dorește un comportament pentru orice alte domenii care se pot modifica pe ecranul, de asemenea.

Publicat 06/05/2015 la 23:46
sursa de către utilizator

voturi
2

Dacă știți în avans numărul de numere care urmează să fie introduse (de exemplu, un cod PIN format din 4 cifre) ai putea auto-demite după 4 prese-cheie, ca pe răspunsul meu la această întrebare similară:

Numărul de respingere Pad

Nu este nevoie de un buton suplimentar făcut în acest caz.

Publicat 16/05/2013 la 14:50
sursa de către utilizator

voturi
2

Am modificat soluția Bryan să fie un pic mai robust, astfel încât să se joace frumos cu alte tipuri de tastaturi care ar putea apărea în aceeași vizualizare. Este descris aici:

Crearea unui buton face pe numpad iOS UIKeyboard

Aș încerca să-l explic aici, dar cea mai mare parte este codul să se uite la care nu s-ar potrivi cu ușurință aici

Publicat 04/10/2012 la 08:38
sursa de către utilizator

voturi
2

Iată soluția cea mai simplă am venit peste. Am învățat acest lucru de la început iOS 5 carte de dezvoltare.

Presupunând câmpul numărul respectiv este apelat numberField.

  1. În ViewController, se adaugă următoarea metodă:

    -(IBAction)closeKeyboard:(id)sender;
    
  2. În ViewController.m, adăugați următorul cod:

    -(IBAction)closeKeyboard:(id)sender
    {
    
         [numberField resignFirstResponder];
    
    }
    
  3. Du - te înapoi la nibdosar.

  4. Deschideți Utilitiestava.
  5. Deschideți Identity inspectorsub Utilitiestigaie.
  6. Faceți clic pe View(în fișierul peniță) o dată. Asigurați - vă că nu ați făcut clic pe oricare dintre elementele din punctul de vedere. Din motive de clarificare, ar trebui să vedeți UIView sub Classîn Identity inspector.
  7. Schimbarea de la clasa UIView la UIControl.
  8. Deschideți Connection Inspector.
  9. Faceți clic și trageți Touch Downși plasați săgeata de pe File Ownerpictograma. (FYI ... file icon Proprietarul este afișată în partea stângă Viewși apare ca un cub gol la interior , cu cadru galben.)
  10. Selectați metoda: closeKeyboard.
  11. Pornește programul.

Acum , când faceți clic oriunde pe fundal View, ar trebui să fie în măsură să respingă tastatura.

Sper că acest lucru vă ajută să rezolvați problema. :-)

Publicat 12/09/2012 la 16:07
sursa de către utilizator

voturi
2

Mai simplu mod este:

Creați butoane particularizate transparente și puneți - l în colțul din stânga jos, care va avea aceeași CGSizeca spațiu gol UIKeyboardTypeNumberPad. Toggle (Arată / ascunde) acest buton pe textfield becomeFirstResponder, pe faceți clic pe butonul respectiv.

Publicat 26/06/2012 la 12:44
sursa de către utilizator

voturi
2

Am descrie o soluție pentru iOS 4.2+ aici , dar butonul dispare după respingerea apare tastatura. Nu e teribil, dar nu este ideal , fie.

Soluția descrisă în întrebarea legată de mai sus include o iluzie mai elegant de a demite butonul, unde se estompeze și vertical deplasa butonul pentru a asigura aspectul că tastatura și butonul sunt împreună de respingere.

Publicat 23/04/2011 la 22:28
sursa de către utilizator

voturi
1

Pentru Swift 2.2 Eu folosesc acest

func addDoneButtonOnKeyboard() {
    let doneToolbar: UIToolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 50))

    let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
    let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: #selector(DetailViewController.finishDecimalKeypad))

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

    doneToolbar.items = items
    doneToolbar.sizeToFit()
    self.productPrice.inputAccessoryView=doneToolbar
}

func finishDecimalKeypad() {
    self.productPrice?.resignFirstResponder()
}
Publicat 04/05/2016 la 08:23
sursa de către utilizator

voturi
0

Swift 2.2 / am folosit răspunsul Dx_ lui. Cu toate acestea, am dorit această funcționalitate pe toate tastaturile. Deci, în clasa mea de bază am pus codul:

func addDoneButtonForTextFields(views: [UIView]) {
    for view in views {
        if let textField = view as? UITextField {
            let doneToolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 50))

            let flexSpace = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
            let done = UIBarButtonItem(title: "Done", style: .Done, target: self, action: #selector(dismissKeyboard))

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

            doneToolbar.items = items
            doneToolbar.sizeToFit()

            textField.inputAccessoryView = doneToolbar
        } else {
            addDoneButtonForTextFields(view.subviews)
        }
    }
}

func dismissKeyboard() {
    dismissKeyboardForTextFields(self.view.subviews)
}

func dismissKeyboardForTextFields(views: [UIView]) {
    for view in views {
        if let textField = view as? UITextField {
            textField.resignFirstResponder()
        } else {
            dismissKeyboardForTextFields(view.subviews)
        }
    }
}

Apoi sună doar addDoneButtonForTextFields pe self.view.subviews în viewDidLoad (sau willDisplayCell în cazul în care utilizați o vizualizare tabel) pentru a adăuga butonul Efectuat pentru toate tastaturi.

Publicat 23/08/2016 la 17:09
sursa de către utilizator

voturi
0

Toți cei de punere în aplicare cu privire la găsirea vizualizarea tastaturii și adăugarea butonului făcut la al 3-lea rând (care este motivul pentru care înălțimea button.y = 163 b / c tastatura este 216) sunt fragile, deoarece iOS păstrează schimba ierarhia vizualizare. De exemplu, nici unul dintre codurile de mai sus nu funcționează pentru iOS9.

Cred că este mai sigur de a găsi doar punctul de vedere cel mai de sus, de [[[UIApplication sharedApplication] ferestre] lastObject], și trebuie doar să adăugați butonul în colțul din stânga jos al acesteia, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53); // modul portret

Publicat 07/12/2015 la 09:36
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more