Jak zobrazit „Done“ tlačítko na numerické klávesnici iPhone

hlasů
208

Není k dispozici tlačítko „Done“ na numerické klávesnici. Když uživatel dokončí zadání číselné údaje v textovém poli, jak mohu využít numerická klávesnice zmizet?

Mohl bych dostat tlačítko „Hotovo“ pomocí standardní klávesnice, ale pak uživatelé budou muset přejít na číselných tlačítek, aby se zadávání čísel. Existuje způsob, jak ukázat na tlačítko „Done“ na numerické klávesnici?

Položena 25/02/2009 v 03:45
zdroj uživatelem
V jiných jazycích...                            


21 odpovědí

hlasů
321

Další řešení. Ideální, pokud tam jsou jiné non-numerická klávesnice textová pole na obrazovce.

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];
}
Odpovězeno 08/07/2012 v 10:26
zdroj uživatelem

hlasů
37

Tady je adaptace na Luda je odpověď na Swift:

V prohlášení svého UIViewController podtřídy put

let numberToolbar: UIToolbar = UIToolbar()

V ViewDidLoad řečeno:

    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 

a přidat funkce frmol a frmol (cítit svobodně vybrat další jména, jen proto změnit názvy voliče v ViewDidLoad

func boopla () {
    textField.resignFirstResponder()
}

func hoopla () {
    textField.text=""
    textField.resignFirstResponder()
}
Odpovězeno 24/02/2015 v 22:24
zdroj uživatelem

hlasů
14

Trik jsem viděl používá je, aby vlastní tlačítko transparentní velikost celého pohledu a pak ve svém způsobu click mít textové pole odstoupil první pomoci. Takže uživatel může kliknout kamkoli mimo pole propustit klávesnice.

Odpovězeno 25/02/2009 v 05:07
zdroj uživatelem

hlasů
11

Řešení v UIKeyboardTypeNumberPad a chybějící návrat klíč funguje skvěle, ale pouze tehdy, pokud neexistují žádné jiné non-numerické klávesnice textová pole na obrazovce.

Vzal jsem si tento kód a obrátil ji do UIViewController, které můžete jednoduše podtřídy, aby se počet polštářky pracovat. Budete muset získat ikony z výše uvedeného odkazu.

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

a 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

Užívat si.

Odpovězeno 05/08/2010 v 21:16
zdroj uživatelem

hlasů
9

Níže je oprava Luďa odpověď s následujícími změnami:

  • pohled příslušenství je automaticky dimenzován na šířku rámu aplikační

  • ukončenou konstanta UIBarButtonItemStyleBorderedje zabráněno

  • tlačítko „Done“ je vytvořena jako UIBarButtonSystemItemDone

V současné době na tlačítko „Hotovo“ se ve středu pohledu příslušenství. Můžete jej umístit vlevo nebo vpravo odstraněním prostor na příslušné straně.

Vynechal jsem tlačítko „Storno“, protože výchozí klávesnice nemá jeden jeden. Pokud chcete tlačítko „Zrušit“, navrhuji, abyste ji konkretizovat jako UIBarButtonSystemItemCancela že byste se ujistit, že nejste vyřazení původní hodnotu v textovém poli. „Storno“ chování realizován v Luda je odpověď, která přepíše hodnotu s prázdným řetězcem, nemusí být to, co chcete.

- (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];
}

Pro více informací o Vedlejší budova pohledy, naleznete v dokumentaci Apple na vlastní zobrazení pro zadávání dat . Pravděpodobně budete chtít konzultovat referenční stránky na UIToolbar a UIBarButtonItem stejně.

Odpovězeno 16/07/2015 v 10:16
zdroj uživatelem

hlasů
6

Mnohem jednodušší řešení

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

    [textViewInstance1 resignFirstResponder];
    [textViewInstance2 resignFirstResponder];
    [textField resignFirstResponder];
}
Odpovězeno 04/08/2011 v 12:01
zdroj uživatelem

hlasů
6

Zde je nejnovější kód. Prostě patří #import "UIViewController + NumPadReturn.h" v viewController.

Zde je .h

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

@interface UIViewController (NumPadReturn)



@end

A .m

#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
Odpovězeno 04/12/2010 v 21:57
zdroj uživatelem

hlasů
5

Toto fórum příspěvek popisuje, jak přizpůsobit UIKeyboard přidat svůj vlastní názor na klávesnici.

Odpovězeno 25/02/2009 v 05:48
zdroj uživatelem

hlasů
3

SWIFT 3,0 jiný chuť, s použitím dílů některých předchozích odpovědí.

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()
}
Odpovězeno 11/09/2017 v 11:41
zdroj uživatelem

hlasů
3

Swift 3 Roztok pomocí rozšíření. Ideální, pokud máte několik číselných UITextFieldobjekty ve vaší aplikaci, protože dává možnost rozhodnout se pro každou UITextField, zda se má provést vlastní akci, když Hotovo nebo Storno se odebírá.

zadejte popis obrázku zde

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

Příklad použití s ​​využitím výchozí akce:

//
// MyViewController.swift
//

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

Příklad použití s využitím vlastního Hotovo akce:

//
// MyViewController.swift
//

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

func doneButtonTappedForMyNumericTextField() { 
    print("Done"); 
    myNumericTextField.resignFirstResponder() 
}
Odpovězeno 19/08/2017 v 11:40
zdroj uživatelem

hlasů
2

Zjistil jsem odpověď @ user1258240 to být docela výstižné vzhledem k tomu, že to není tak jednoduché, jak nastavení returnKeyTypevlastnosti.

Jen jsem chtěl přispět svou vlastní metodu „opakovaně použitelného“ na to:

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)
}
Odpovězeno 04/11/2016 v 05:34
zdroj uživatelem

hlasů
2

Máte-li více číselných polí, navrhuji subclassing UITextField vytvořit NumericTextField, který vždy zobrazuje numerickou klávesnici s hotovou tlačítka. Poté jednoduše přiřadit vaše číselná pole s touto třídou v Builder Interface a nebudete potřebovat žádné další kód v některém z vašeho pohledu regulátorů. Následující text je Swift 3.0 třída, která jsem pomocí v 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()
    }
}
Odpovězeno 02/10/2016 v 13:07
zdroj uživatelem

hlasů
2

Můžeme také využít „uživatel dotkl někde jinde“ řešení ještě jednodušší, kdybychom jen říct názor, podle našeho názoru kontroléru pro ukončení editace:

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

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

... za předpokladu, že „dotýkat jinde odvolává klávesnice“ je žádoucí chování k jiným editovatelných polí na pohled stejně.

Odpovězeno 06/05/2015 v 23:46
zdroj uživatelem

hlasů
2

Máte-li předem vědět, počet čísel, které mají být zapsány (např 4-místné PIN), které by mohly auto-propustit po 4 stisky kláves, jak na mé odpovědi na tuto podobnou otázku:

propouštět Number Pad

Není třeba pro další uzavřená tlačítka v tomto případě.

Odpovězeno 16/05/2013 v 14:50
zdroj uživatelem

hlasů
2

Upravil jsem Bryanův řešení, aby se trochu robustnější, takže bude hrát dobře s ostatními typy klávesnic, které by mohly objevit ve stejném pohledu. Je zde popsán:

Vytvoření hotová tlačítka na numerické klávesnici iOS UIKeyboard

Já bych zkusit to vysvětlit tady, ale většina z toho je kód se podívat na které by se snadno vejde zde

Odpovězeno 04/10/2012 v 08:38
zdroj uživatelem

hlasů
2

Zde je nejjednodušší řešení jsem narazil. Naučil jsem se to od začátku až iOS 5 Development knihu.

Za předpokladu, že číslo pole se nazývá numberField.

  1. V ViewControllerpřidejte následující metodu:

    -(IBAction)closeKeyboard:(id)sender;
    
  2. V roce ViewController.m, přidejte následující kód:

    -(IBAction)closeKeyboard:(id)sender
    {
    
         [numberField resignFirstResponder];
    
    }
    
  3. Vrať se do nibsouboru.

  4. Otevřené Utilitiespánev.
  5. Otevřete Identity inspectorpod Utilitiespánev.
  6. Kliknout na tlačítko View(v nib souboru) jednou. Ujistěte se, že jste klikli na některou z položek v pohledu. V zájmu objasnění, měli byste vidět UIView v Classoblasti Identity inspector.
  7. Změna třídy z UIView na UIControl.
  8. Otevřené Connection Inspector.
  9. Kliknout a táhnout Touch Downand drop šipku na File Ownerikoně. (FYI ... se zobrazí ikona Soubor Vlastník na levé straně Viewa se objeví jako dutý krychle se žlutým rámečkem).
  10. Zvolit metodu: closeKeyboard.
  11. Spustit program.

Nyní, když kliknete kamkoliv na pozadí View, měli byste být schopni odmítnout klávesnici.

Doufám, že to pomůže vyřešit váš problém. :-)

Odpovězeno 12/09/2012 v 16:07
zdroj uživatelem

hlasů
2

Nejjednodušší způsob je:

Vytvořit vlastní tlačítko transparentní a umístit jej v levém dolním rohu, který bude mít stejné CGSizejako prázdné místo v UIKeyboardTypeNumberPad. Toggle (zobrazit / skrýt) toto tlačítko na TextField becomeFirstResponderna stisknutí tlačítka, resp.

Odpovězeno 26/06/2012 v 12:44
zdroj uživatelem

hlasů
2

Popisuji jedno řešení pro iOS verze 4.2 nebo zde ale tlačítko propustit zesílí poté, co se objeví klávesnice. Není to hrozné, ale není ideální jeden.

Řešení popsaná v otázce odkazovaných výše zahrnují elegantnější iluzi odvolat na tlačítko, kde jsem vyblednutí a ve svislém směru přemisťování tlačítka poskytovat dojem, že klávesnice a tlačítko se zamítnou dohromady.

Odpovězeno 23/04/2011 v 22:28
zdroj uživatelem

hlasů
1

Pro Swift 2.2 Používám to

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()
}
Odpovězeno 04/05/2016 v 08:23
zdroj uživatelem

hlasů
0

Swift 2.2 / Použil jsem Dx_ je odpověď. Nicméně, chtěl jsem tuto funkci na všech klávesnic. Takže podle mého základní třídě jsem dal kód:

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

Pak už stačí jen zavolat na addDoneButtonForTextFields self.view.subviews v viewDidLoad (nebo willDisplayCell pokud používáte zobrazení tabulky) přidat tlačítko Hotovo všem klávesnice.

Odpovězeno 23/08/2016 v 17:09
zdroj uživatelem

hlasů
0

Všichni ti, implementace o nalezení zobrazení klávesnice a přidání tlačítka podepsané ve 3. řadě (to je důvod, proč výška button.y = 163 b / c klávesnice je 216) jsou křehké, protože iOS udržuje změnit hierarchii zobrazení. Například žádný z uvedených kódů pracovat iOS9.

Myslím, že je mnohem bezpečnější, aby jen najít vrchní pohled tím, že [[[UIApplication sharedApplication] windows] lastObject], a stačí přidat tlačítko v levém dolním rohu tom, doneButton.frame = CGRectMake (0 SCREEN_HEIGHT-53, 106 , 53); // režim portrét

Odpovězeno 07/12/2015 v 09:36
zdroj uživatelem

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