Jak pokazać przycisk na klawiaturze numerycznej iPhone „Gotowe”

głosy
208

Nie ma przycisk „Gotowe” na klawiaturze numerycznej. Gdy użytkownik zakończy wprowadzania danych numerycznych w polu tekstowym, w jaki sposób można sprawić, że klawiatura numeryczna zniknąć?

Mógłbym dostać przycisk „Gotowe” za pomocą domyślnej klawiatury, ale użytkownicy będą musieli przejść do klawiszy numerycznych w celu wprowadzania liczb. Czy istnieje sposób, aby pokazać przycisk „Gotowe” na klawiaturze numerycznej?

Utwórz 25/02/2009 o 03:45
źródło użytkownik
W innych językach...                            


21 odpowiedzi

głosy
321

Inne rozwiązanie. Idealne, jeśli istnieją inne pola tekstowe non-numerycznej na ekranie.

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];
}
Odpowiedział 08/07/2012 o 10:26
źródło użytkownik

głosy
37

Tutaj jest adaptacją na odpowiedź Luda za SWIFT:

W deklaracji swojej podklasy UIViewController put

let numberToolbar: UIToolbar = UIToolbar()

w viewDidLoad umieścić:

    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 dodać boom funkcje i Hoopla (czuć swobodnie wybrać inne nazwy, po prostu zmienić nazwy selektora w viewDidLoad odpowiednio

func boopla () {
    textField.resignFirstResponder()
}

func hoopla () {
    textField.text=""
    textField.resignFirstResponder()
}
Odpowiedział 24/02/2015 o 22:24
źródło użytkownik

głosy
14

Sztuką Widziałem stosowany jest, aby przezroczysty przycisk niestandardowy rozmiar całego widoku, a następnie kliknij w jego metodzie, mają pole tekstowe zrezygnować pierwszą odpowiedź. Tak więc użytkownik może kliknąć w dowolnym miejscu poza polem, aby zamknąć klawiaturę.

Odpowiedział 25/02/2009 o 05:07
źródło użytkownik

głosy
11

Rozwiązaniem w UIKeyboardTypeNumberPad i brakuje klawisz powrotu działa świetnie, ale tylko wtedy, gdy nie istnieją inne niż liczba pól tekstowych pad na ekranie.

Wziąłem ten kod i obrócił go w UIViewController, że można po prostu podklasy, aby liczba klocki działać. trzeba będzie uzyskać ikon z powyższego linku.

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

Cieszyć się.

Odpowiedział 05/08/2010 o 21:16
źródło użytkownik

głosy
9

Poniżej znajduje się przegląd odpowiedzi Luda jest z następującymi zmianami:

  • widok akcesorium jest automatycznie dopasowany do szerokości ramy aplikacji

  • wycofanego stałe UIBarButtonItemStyleBorderedunika

  • przycisk „Gotowe” jest tworzony jako UIBarButtonSystemItemDone

Obecnie przycisk „Gotowe”, skoncentrowana jest w widoku z akcesoriami. Można umieścić go w lewo lub w prawo usuwając miejsca na stosownej stronie.

Mam pominąć przycisk „Anuluj”, ponieważ domyślna klawiatura nie ma jednego albo. Jeżeli chcesz przycisk „Anuluj”, sugeruję oznacz ją jako UIBarButtonSystemItemCanceli upewnić się, nie jesteś odrzucając oryginalną wartość w swoim polu tekstowym. „Anuluj” zachowanie realizowane w odpowiedzi Luda, który nadpisuje wartości z pustym ciągiem, nie może być to, co chcesz.

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

Aby uzyskać więcej informacji na temat budowy akcesoriów widoki można znaleźć w dokumentacji Apple na widoków niestandardowych dla danych wejściowych . Prawdopodobnie będzie chciał skonsultować stron odniesienie UIToolbar i UIBarButtonItem również.

Odpowiedział 16/07/2015 o 10:16
źródło użytkownik

głosy
6

Znacznie prostsze rozwiązanie

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

    [textViewInstance1 resignFirstResponder];
    [textViewInstance2 resignFirstResponder];
    [textField resignFirstResponder];
}
Odpowiedział 04/08/2011 o 12:01
źródło użytkownik

głosy
6

Oto najnowszy kod. Po prostu zawierać #import "UIViewController + NumPadReturn.h" w swojej viewController.

Oto .h

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

@interface UIViewController (NumPadReturn)



@end

I oni

#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
Odpowiedział 04/12/2010 o 21:57
źródło użytkownik

głosy
5

To forum post opisuje jak dostosować UIKeyboard aby dodać swój własny pogląd na klawiaturze.

Odpowiedział 25/02/2009 o 05:48
źródło użytkownik

głosy
3

SWIFT 3,0 inny smak, wykorzystując fragmenty niektórych poprzednich odpowiedzi.

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()
}
Odpowiedział 11/09/2017 o 11:41
źródło użytkownik

głosy
3

Swift 3 roztwór za pomocą przedłużenia. Idealny jeśli masz kilka numerycznych UITextFieldobiektów w swojej aplikacji, ponieważ daje możliwość elastycznego decydowania, dla każdego UITextField, czy wykonać akcję niestandardową podczas Sporządzono lub Anuluj jest na podsłuchu.

wprowadzić opis obrazu tutaj

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

Przykład użycia z wykorzystaniem domyślnych działań:

//
// MyViewController.swift
//

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

Przykładem wykorzystania stosując własne Gotowe działania:

//
// MyViewController.swift
//

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

func doneButtonTappedForMyNumericTextField() { 
    print("Done"); 
    myNumericTextField.resignFirstResponder() 
}
Odpowiedział 19/08/2017 o 11:40
źródło użytkownik

głosy
2

Znalazłem odpowiedź @ user1258240 za być dość zwięzły podane to nie jest tak proste, jak ustawienie returnKeyTypewłaściwości.

Po prostu chciał przyczynić się moje własne podejście „wielokrotnego użytku”, aby w ten sposób:

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)
}
Odpowiedział 04/11/2016 o 05:34
źródło użytkownik

głosy
2

Jeśli masz kilka pól numerycznych, proponuję subclassing UITextField stworzyć NumericTextField że zawsze wyświetla klawiaturę numeryczną z przycisku Gotowe. Następnie, po prostu powiązać swoje pola numeryczne z tej klasy w konstruktorze interfejsu i nie potrzeba żadnego dodatkowego kodu w dowolnych Zobacz kontrolerów. Poniżej znajduje Swift 3.0 Klasa że używam w 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()
    }
}
Odpowiedział 02/10/2016 o 13:07
źródło użytkownik

głosy
2

Możemy też sprawić, że „użytkownik dotknął gdzieś indziej” rozwiązanie jeszcze prostsze, jeśli po prostu powiedzieć widok Naszym zdaniem regulatora, aby zakończyć edycję:

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

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

... zakładając, że „gdzie indziej odrzuca dotykania klawiatury” pożądane jest zachowanie dla innych edytowalnych pól na widoku, jak również.

Odpowiedział 06/05/2015 o 23:46
źródło użytkownik

głosy
2

Jeśli wiesz z góry liczba numerów należy wprowadzić (np PIN 4-cyfrowy) można automatycznie odrzucić po 4 naciśnięć klawiszy, jak na moją odpowiedź na to pytanie podobne:

odwoływanie Number Pad

Nie ma potrzeby stosowania dodatkowego przycisku Gotowe w tej sprawie.

Odpowiedział 16/05/2013 o 14:50
źródło użytkownik

głosy
2

I zmodyfikowane rozwiązanie Bryana być trochę bardziej wytrzymałe, tak, że będzie grać dobrze z innymi typami klawiatur, które mogą pojawić się w tym samym widoku. Jest to opisane tutaj:

Tworzenie przycisku Gotowe na klawiaturze numerycznej iOS UIKeyboard

ja staram się to wyjaśnić tutaj, ale większość z nich jest kod, aby spojrzeć na które nie łatwo zmieścić tutaj

Odpowiedział 04/10/2012 o 08:38
źródło użytkownik

głosy
2

Oto najprostsze rozwiązanie mam natknąć. Nauczyłem się tego od początku książki iOS 5 Development.

Zakładając, że pole numeru nazywa numberField.

  1. W ViewControllerdodaj następujący sposób:

    -(IBAction)closeKeyboard:(id)sender;
    
  2. W ViewController.mdodaj następujący kod:

    -(IBAction)closeKeyboard:(id)sender
    {
    
         [numberField resignFirstResponder];
    
    }
    
  3. Wróć do nibpliku.

  4. Otwarte UtilitiesPAN.
  5. Otwórz Identity inspectorpod Utilitiespatelnię.
  6. Kliknij View(w pliku nib) raz. Upewnij się, że nie kliknąłeś na którykolwiek z elementów w widoku. W trosce o wyjaśnienia powinny być widoczne pod UIView Classw Identity inspector.
  7. Zmień klasę z UIView do UIControl.
  8. Otwarte Connection Inspector.
  9. Kliknij i przeciągnij Touch Downi upuść strzałkę na File Ownerikonie. (FYI ... Właściciel pliku ikona jest wyświetlana po lewej Viewi pojawia się jako pusty sześcian z żółtą ramką).
  10. Wybierz metodę: closeKeyboard.
  11. Uruchomić program.

Teraz po kliknięciu na dowolnym tle View, powinno być możliwe, aby zamknąć klawiaturę.

Nadzieję, że to pomoże w rozwiązaniu problemu. :-)

Odpowiedział 12/09/2012 o 16:07
źródło użytkownik

głosy
2

Najprostszym sposobem jest:

Tworzenie niestandardowych przezroczysty przycisk i umieść go w lewym dolnym rogu, które będą miały taki sam CGSizejak w pustej przestrzeni UIKeyboardTypeNumberPad. Przegubowe (pokaż / ukryj) ten przycisk na textField becomeFirstResponder, na kliknięcia przycisku odpowiednio.

Odpowiedział 26/06/2012 o 12:44
źródło użytkownik

głosy
2

Opiszę jedno rozwiązanie dla iOS wersji 4.2 lub nowszej tu jednak blednie w przycisk odwołać po pojawieniu się klawiatury. To nie jest straszne, ale nie idealny albo.

Rozwiązanie opisane w kwestii związanej powyżej zawiera bardziej eleganckie wrażenie o zwolnieniu przycisku, gdzie wygaszenia i pionowo przemieszczenia przycisku w celu zapewnienia wrażenia, że ​​klawiatura i przycisk zwalniającą razem.

Odpowiedział 23/04/2011 o 22:28
źródło użytkownik

głosy
1

Dla Swift 2.2 Używam tego

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()
}
Odpowiedział 04/05/2016 o 08:23
źródło użytkownik

głosy
0

Swift 2.2 / Kiedyś odpowiedź Dx_ użytkownika. Jednak chciałem tę funkcję na wszystkich klawiaturach. Więc w moim klasy podstawowej umieścić kod:

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

Następnie wystarczy zadzwonić addDoneButtonForTextFields na self.view.subviews w viewDidLoad (lub willDisplayCell przypadku korzystania z widoku tabeli), aby dodać przycisk Gotowe do wszystkich klawiatur.

Odpowiedział 23/08/2016 o 17:09
źródło użytkownik

głosy
0

Wszyscy ci, implementacja o znalezienie widok klawiatury i dodając przycisk Gotowe na 3. rzędu (dlatego wysokość button.y = 163 B / C klawiatura jest 216), ponieważ są delikatne iOS utrzymuje zmienić hierarchię widoku. Na przykład żaden z powyższych kodów pracować iOS9.

Myślę, że to jest bardziej bezpieczne prostu znaleźć najwyższą widoku przez [[[UIApplication sharedApplication] Windows] lastObject], i po prostu dodać przycisk w lewym dolnym rogu to, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53) // sposób portret

Odpowiedział 07/12/2015 o 09:36
źródło użytkownik

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