Wie auf dem iPhone Ziffernblock Schaltfläche „Fertig“ um zu zeigen,

stimmen
208

Es gibt keine Schaltfläche „Fertig“ auf dem Ziffernblock. Wenn ein Benutzer in einem Textfeld numerische Informationen beendet die Eingabe, wie kann ich den Ziffernblock verschwinden lassen?

Ich könnte eine Schaltfläche „Fertig“ erhalten, indem die Standard-Tastatur, aber dann würden Benutzer die Zifferntasten, um die Eingabe von Zahlen zu wechseln. Gibt es eine Möglichkeit, einen „Erledigt“ -Taste auf dem Ziffernblock zu zeigen?

Veröffentlicht am 25/02/2009 um 03:45
quelle vom benutzer
In anderen Sprachen...                            


21 antworten

stimmen
321

Eine andere Lösung. Perfekt, wenn es andere nicht-Nummernblock Textfelder auf dem Bildschirm.

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];
}
Beantwortet am 08/07/2012 um 10:26
quelle vom benutzer

stimmen
37

Hier ist eine Anpassung für Luda Antwort für Swift:

In der Deklaration Ihrer UIViewController Unterklasse Put

let numberToolbar: UIToolbar = UIToolbar()

in ViewDidLoad setzen:

    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 

und die fügen Sie die Funktionen Tamtam und Trara (fühlen sich frei, andere Namen zu wählen, ändern Sie einfach die Selektornamen in ViewDidLoad entsprechend

func boopla () {
    textField.resignFirstResponder()
}

func hoopla () {
    textField.text=""
    textField.resignFirstResponder()
}
Beantwortet am 24/02/2015 um 22:24
quelle vom benutzer

stimmen
14

Der Trick, den ich verwendet habe gesehen, ist eine benutzerdefinierter transparente Schaltfläche, um die Größe der gesamten Ansicht zu machen und dann in seiner Click-Methode, hat das Textfeld Ersthelfer zurücktreten. So kann der Anwender auf eine beliebige Stelle außerhalb des Feldes um die Tastatur zu schließen.

Beantwortet am 25/02/2009 um 05:07
quelle vom benutzer

stimmen
11

Die Lösung in UIKeyboardTypeNumberPad und fehlenden Return - Taste funktionieren gut , aber nur , wenn es keine andere nicht-Ziffernblock Textfelder auf dem Bildschirm.

Ich habe diesen Code und verwandelte sie in eine UIViewController, die man einfach eine Unterklasse können Ziffernblock funktioniert. Sie müssen die Symbole aus dem obigen Link zu erhalten.

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

und 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

Genießen.

Beantwortet am 05/08/2010 um 21:16
quelle vom benutzer

stimmen
9

Nachfolgend finden Sie eine Überarbeitung der Antwort des Luda mit den folgenden Änderungen:

  • Das Zubehör Ansicht ist die Breite des Anwendungsrahmens automatisch bemessen

  • die deprecated konstant UIBarButtonItemStyleBorderedvermieden

  • die Schaltfläche „Fertig“ wird als ein instanziiert UIBarButtonSystemItemDone

Derzeit ist die Schaltfläche „Fertig“ wird im Zubehör Ansicht zentriert. Sie können es auf der linken oder rechten Position durch den Raum auf der betreffenden Seite zu löschen.

Ich habe eine Schaltfläche „Abbrechen“ , weil die Standardtastatur nicht über eine entweder weggelassen. Wenn Sie eine Schaltfläche „Abbrechen“ wollen, schlage ich vor, dass Sie es als einen instanziiert UIBarButtonSystemItemCancelund dass Sie sicherstellen , dass Sie nicht den ursprünglichen Wert im Textfeld zu verwerfen. Das „Abbrechen“ Verhalten in Luda Antwort implementiert, die den Wert mit einem leeren String überschreibt, kann nicht sein , was Sie wollen.

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

Weitere Informationen zu Zubehör Ansichten Gebäude finden Sie in der Apple - Dokumentation über benutzerdefinierte Ansichten für die Dateneingabe . Sie werden wahrscheinlich wollen die Referenzseiten auf konsultieren UIToolbar und UIBarButtonItem auch.

Beantwortet am 16/07/2015 um 10:16
quelle vom benutzer

stimmen
6

Eine viel einfachere Lösung

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

    [textViewInstance1 resignFirstResponder];
    [textViewInstance2 resignFirstResponder];
    [textField resignFirstResponder];
}
Beantwortet am 04/08/2011 um 12:01
quelle vom benutzer

stimmen
6

Hier ist der jüngste Code. Fügen Sie einfach "UIViewController + NumPadReturn.h" in Ihrem Viewcontroller #import.

Hier ist die .h

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

@interface UIViewController (NumPadReturn)



@end

Und sie

#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
Beantwortet am 04/12/2010 um 21:57
quelle vom benutzer

stimmen
5

Dieses Forum Beitrag beschreibt , wie die UIKeyboard an Ihre individuelle Sicht auf die Tastatur hinzuzufügen.

Beantwortet am 25/02/2009 um 05:48
quelle vom benutzer

stimmen
3

SWIFT 3.0 ein anderer Geschmack, Teile von einigen früheren Antworten verwenden.

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()
}
Beantwortet am 11/09/2017 um 11:41
quelle vom benutzer

stimmen
3

Ein Swift 3 Lösung , die eine Erweiterung. Ideal , wenn Sie mehr numerischen haben UITextFieldObjekte in Ihrer Anwendung , da es die Flexibilität, für jeden zu entscheiden gibt UITextField, ob eine benutzerdefinierte Aktion auszuführen , wenn Fertig oder Abbrechen abgegriffen wird.

Geben Sie hier image description

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

Beispiel für die Verwendung der Standardaktionen verwenden:

//
// MyViewController.swift
//

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

Beispiel für die Verwendung einer benutzerdefinierten mit Fertig Aktion:

//
// MyViewController.swift
//

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

func doneButtonTappedForMyNumericTextField() { 
    print("Done"); 
    myNumericTextField.resignFirstResponder() 
}
Beantwortet am 19/08/2017 um 11:40
quelle vom benutzer

stimmen
2

Ich fand die Antwort von @ user1258240 ziemlich präzise sein angesichts dieser als Einstellung eines nicht ganz so einfach ist returnKeyTypeEigentum.

Ich wollte nur meinen eigenen „wiederverwendbare“ Ansatz dazu beitragen:

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)
}
Beantwortet am 04/11/2016 um 05:34
quelle vom benutzer

stimmen
2

Wenn Sie mehrere numerische Felder haben, schlage ich vor Subklassifizieren UITextField ein NumericTextField zu erstellen, die zeigt immer eine numerische Tastatur mit einer Schaltfläche Fertig. Dann einfach verknüpfen Ihre numerische Felder mit dieser Klasse in der Interface Builder und Sie werden keine zusätzlichen Code in Ihren View-Controller benötigen. Im Folgenden ist Swift 3.0-Klasse, die ich in Xcode 8.0 verwenden.

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()
    }
}
Beantwortet am 02/10/2016 um 13:07
quelle vom benutzer

stimmen
2

Wir können auch machen die „user woanders berühren“ Lösung noch einfacher , wenn wir unsere gerade nach Ansicht des View - Controller sagen um die Bearbeitung zu beenden:

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

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

... unter der Annahme, dass „an anderer Stelle zu berühren entlässt die Tastatur“ Verhalten für alle anderen editierbaren Felder auf der Ansicht, als auch gewünscht ist.

Beantwortet am 06/05/2015 um 23:46
quelle vom benutzer

stimmen
2

Wenn Sie die Anzahl der Nummern im Voraus eingegeben wird (zB ein 4-stellige PIN) Sie könnten nach 4 Tastendrücke Auto-abweisen, wie pro meiner Antwort auf diese ähnliche Frage:

Entlassung Nummernblock

Keine Notwendigkeit für eine zusätzliche getan Taste in diesem Fall.

Beantwortet am 16/05/2013 um 14:50
quelle vom benutzer

stimmen
2

Ich veränderte Bryan-Lösung etwas robuster zu sein, so dass es schön mit anderen Arten von Tastaturen spielen würde, die in der gleichen Ansicht erscheinen. Es ist hier beschrieben:

Erstellen Sie eine DONE-Taste auf dem iOS numpad UIKeyboard

Ich würde versuchen, es hier zu erklären, aber das meiste davon ist Code auf das aussehen würde nicht leicht hier passen

Beantwortet am 04/10/2012 um 08:38
quelle vom benutzer

stimmen
2

Hier ist die einfachste Lösung, die mir begegnet ist. Ich habe das gelernt von iOS 5 Entwicklung Buch Beginning.

Unter der Annahme , das Nummernfeld wird aufgerufen numberField.

  1. In ViewControllerden folgenden Verfahren:

    -(IBAction)closeKeyboard:(id)sender;
    
  2. In ViewController.mden folgenden Code:

    -(IBAction)closeKeyboard:(id)sender
    {
    
         [numberField resignFirstResponder];
    
    }
    
  3. Gehen Sie zurück zu nibstellen.

  4. Offene UtilitiesPfanne.
  5. Öffnen Sie die Identity inspectorunter UtilitiesPfanne.
  6. Klicken Sie auf die View(in NIB - Datei) einmal. Stellen Sie sicher , dass Sie nicht auf eines der Elemente in der Ansicht geklickt haben. Aus Gründen der Klarstellung, sollten Sie UIView unter sehen Classin Identity inspector.
  7. Ändern Sie die Klasse von UIView UIControl.
  8. Öffnen Connection Inspector.
  9. Klicken und Ziehen Touch Downund den Pfeil auf Drop - File OwnerSymbol. (FYI ... File Owner - Symbol wird auf der linken Seite angezeigt Viewund erscheint als Hohlwürfel mit gelben Rahmen.)
  10. Wählen Sie die Methode: closeKeyboard.
  11. Führen Sie das Programm.

Nun , wenn Sie auf eine beliebige Stelle auf den Hintergrund der View, sollte es möglich sein , die Tastatur zu schließen.

Hoffe, das hilft Ihnen, Ihr Problem zu lösen. :-)

Beantwortet am 12/09/2012 um 16:07
quelle vom benutzer

stimmen
2

Der einfachste Weg ist:

Erstellen Sie individuelle transparente Schaltfläche und legen Sie sie in der linken unteren Ecke, die gleiche haben CGSizesich als leerer Raum UIKeyboardTypeNumberPad. Toggle (Ein- / Ausblenden) Mit dieser Taste auf Textfield becomeFirstResponder, auf den Knopf klicken auf.

Beantwortet am 26/06/2012 um 12:44
quelle vom benutzer

stimmen
2

Ich beschreibe eine Lösung für iOS 4.2+ hier aber die entlassene Taste blendet , nachdem die Tastatur erscheint. Es ist nicht schrecklich, aber auch nicht ideal.

Die Lösung in dem oben beschriebenen Frage verknüpft umfasst eine elegantere Illusion den Knopf zu entlassen, wo ich verblassen und vertikal auf die Schaltfläche verdrängen das Aussehen zu schaffen, die das Tastenfeld und die Taste zusammen entlassen.

Beantwortet am 23/04/2011 um 22:28
quelle vom benutzer

stimmen
1

Für Swift 2.2 Ich benutze diese

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()
}
Beantwortet am 04/05/2016 um 08:23
quelle vom benutzer

stimmen
0

Swift 2.2 / benutzte ich Dx_ Antwort. Allerdings wollte ich diese Funktionalität auf allen Tastaturen. Also in meiner Basisklasse habe ich den Code:

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

Dann rufen Sie einfach addDoneButtonForTextFields auf self.view.subviews in viewDidLoad (oder willDisplayCell wenn eine Tabellenansicht verwenden) auf die Schaltfläche Fertig, um alle Tastaturen hinzuzufügen.

Beantwortet am 23/08/2016 um 17:09
quelle vom benutzer

stimmen
0

Alle, die Implementierung über die Tastatur Ansicht herausfinden und auf die Schaltfläche Fertig auf der 3. Zeile (das ist, warum button.y = 163 b / c Tastatur Höhe 216 ist) ist zerbrechlich, weil iOS hält die Ansicht Hierarchie ändern. Zum Beispiel keiner von oben Codes arbeiten für iOS9.

Ich denke, dass es sicherer ist, nur die oberste Ansicht zu finden, die von [[[UIApplication shared] Fenster] lastObject] und fügen Sie einfach auf den Button am linken unteren Ecke davon, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53); // Portraitmodus

Beantwortet am 07/12/2015 um 09:36
quelle vom benutzer

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