Πώς να δείξει «Τέλος» κουμπί για το iPhone αριθμητικό πληκτρολόγιο

ψήφοι
208

Δεν υπάρχει το κουμπί «Τέλος» στο αριθμητικό πληκτρολόγιο. Όταν ο χρήστης ολοκληρώσει την εισαγωγή αριθμητικών πληροφοριών σε ένα πεδίο κειμένου, πώς μπορώ να κάνω το αριθμητικό πληκτρολόγιο εξαφανιστεί;

Θα μπορούσα να πάρω ένα κουμπί «Τέλος», χρησιμοποιώντας το προεπιλεγμένο πληκτρολόγιο, αλλά τότε οι χρήστες θα πρέπει να στραφούν προς τα αριθμητικά πλήκτρα για να εισάγετε αριθμούς. Είναι ένας τρόπος για να δείξει ένα «Τέλος» κουμπί στο αριθμητικό πληκτρολόγιο εκεί;

Δημοσιεύθηκε 25/02/2009 στις 03:45
πηγή χρήστη
Σε άλλες γλώσσες...                            


21 απαντήσεις

ψήφοι
321

Μια άλλη λύση. Τέλεια, αν υπάρχουν και άλλα πεδία μη-αριθμητικό πληκτρολόγιο κειμένου στην οθόνη.

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];
}
Απαντήθηκε 08/07/2012 στις 10:26
πηγή χρήστη

ψήφοι
37

Εδώ είναι μια προσαρμογή για την απάντηση Luda για Swift:

Στη δήλωση του UIViewController υποκατηγορία θέσει σας

let numberToolbar: UIToolbar = UIToolbar()

στην viewDidLoad θέσει:

    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 

και το προσθέτουμε το λειτουργίες hoopla και hoopla (να αισθάνονται ελεύθεροι να επιλέξουν άλλα ονόματα, απλά αλλάξτε τα ονόματα επιλογέα στη viewDidLoad αναλόγως

func boopla () {
    textField.resignFirstResponder()
}

func hoopla () {
    textField.text=""
    textField.resignFirstResponder()
}
Απαντήθηκε 24/02/2015 στις 22:24
πηγή χρήστη

ψήφοι
14

Το τέχνασμα που έχω δει που χρησιμοποιείται είναι να κάνει ένα προσαρμοσμένο κουμπί διαφανές το μέγεθος του συνόλου προβολή και, στη συνέχεια, στη μέθοδο κλικ της, έχουν το πεδίο κειμένου παραιτηθεί πρώτων βοηθειών. Έτσι, ο χρήστης μπορεί να κάνει κλικ σε οποιοδήποτε σημείο έξω από το πεδίο για να απορρίψει το πληκτρολόγιο.

Απαντήθηκε 25/02/2009 στις 05:07
πηγή χρήστη

ψήφοι
11

Η λύση στο UIKeyboardTypeNumberPad και λείπει πλήκτρο επιστροφής λειτουργεί μεγάλο, αλλά μόνο αν δεν υπάρχουν άλλες μη-αριθμό πεδίων pad κειμένου στην οθόνη.

Πήρα αυτό το κώδικα και την μετέτρεψε σε μια UIViewController που μπορείτε απλά να υποκατηγορία για να λειτουργήσει μαξιλάρια αριθμό. Θα χρειαστεί να πάρετε τις εικόνες από τα παραπάνω σύνδεσμο.

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

και 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

Απολαμβάνω.

Απαντήθηκε 05/08/2010 στις 21:16
πηγή χρήστη

ψήφοι
9

Παρακάτω είναι μια αναθεώρηση της απάντησης Luda με τις ακόλουθες αλλαγές:

  • η θέα εξάρτημα αυτόματα μέγεθος με το πλάτος του πλαισίου εφαρμογής

  • η αποδοκιμασμένο σταθερά UIBarButtonItemStyleBorderedαποφεύγεται

  • το κουμπί «Τέλος» αρχικοποιείται ως UIBarButtonSystemItemDone

Αυτή τη στιγμή το κουμπί «Τέλος» επικεντρώνεται στην προβολή αξεσουάρ. Μπορείτε να το τοποθετήσετε στα αριστερά ή δεξιά από τη διαγραφή του χώρου στο σχετικό πλευρά.

Έχω παραλείψει ένα κουμπί «Ακύρωση», επειδή το προεπιλεγμένο πληκτρολόγιο δεν έχετε το ένα είτε. Αν θέλετε ένα κουμπί «Ακύρωση», σας προτείνω να το υπόσταση ως UIBarButtonSystemItemCancelκαι να βεβαιωθείτε ότι δεν είστε απορρίπτοντας την αρχική τιμή στο πεδίο κειμένου σας. Η συμπεριφορά «Ακύρωση» υλοποιείται σε απάντηση Luda, η οποία αντικαθιστά την τιμή με ένα κενό string, μπορεί να μην είναι ό, τι θέλετε.

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

Για περισσότερες πληροφορίες σχετικά με την κατασκευή αξεσουάρ απόψεις, ανατρέξτε στην τεκμηρίωση της Apple για προσαρμοσμένες προβολές για εισαγωγή δεδομένων . Μάλλον θα θέλετε να συμβουλευτείτε τις σελίδες αναφοράς για UIToolbar και UIBarButtonItem επίσης.

Απαντήθηκε 16/07/2015 στις 10:16
πηγή χρήστη

ψήφοι
6

Ένα πολύ ευκολότερη λύση

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

    [textViewInstance1 resignFirstResponder];
    [textViewInstance2 resignFirstResponder];
    [textField resignFirstResponder];
}
Απαντήθηκε 04/08/2011 στις 12:01
πηγή χρήστη

ψήφοι
6

Εδώ είναι το πιο πρόσφατο κώδικα. Απλά περιλαμβάνουν #import "UIViewController + NumPadReturn.h" σε viewController σας.

Εδώ είναι η .h

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

@interface UIViewController (NumPadReturn)



@end

Και η .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
Απαντήθηκε 04/12/2010 στις 21:57
πηγή χρήστη

ψήφοι
5

Αυτό το μήνυμα στο φόρουμ περιγράφει πώς μπορείτε να προσαρμόσετε το UIKeyboard να προσθέσετε προσαρμοσμένες άποψή σας πάνω στο πληκτρολόγιο.

Απαντήθηκε 25/02/2009 στις 05:48
πηγή χρήστη

ψήφοι
3

SWIFT 3.0 Μια διαφορετική γεύση, χρησιμοποιώντας τμήματα ορισμένων προηγούμενες απαντήσεις.

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()
}
Απαντήθηκε 11/09/2017 στις 11:41
πηγή χρήστη

ψήφοι
3

Ένα Swift 3 διάλυμα χρησιμοποιώντας μια επέκταση. Ιδανικό αν έχετε πολλά αριθμητικά UITextFieldαντικείμενα στην εφαρμογή σας δίνει την ευελιξία να αποφασίζουν, για κάθε μία UITextField, αν πρέπει να εκτελέσετε μια προσαρμοσμένη ενέργεια όταν Έγινε ή Ακύρωση αξιοποιείται.

εισάγετε περιγραφή της εικόνας εδώ

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

Παράδειγμα της χρήσης χρησιμοποιώντας τις προεπιλεγμένες ενέργειες:

//
// MyViewController.swift
//

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

Παράδειγμα της χρήσης χρησιμοποιώντας μια προσαρμοσμένη Έγινε δράση:

//
// MyViewController.swift
//

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

func doneButtonTappedForMyNumericTextField() { 
    print("Done"); 
    myNumericTextField.resignFirstResponder() 
}
Απαντήθηκε 19/08/2017 στις 11:40
πηγή χρήστη

ψήφοι
2

Βρήκα την απάντηση @ user1258240 για να είναι αρκετά περιεκτική δεδομένο αυτό δεν είναι τόσο απλό όσο τον καθορισμό ενός returnKeyTypeακινήτου.

Απλά ήθελα να συμβάλουν δική μου «επαναχρησιμοποιήσιμο» προσέγγιση σε αυτό:

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)
}
Απαντήθηκε 04/11/2016 στις 05:34
πηγή χρήστη

ψήφοι
2

Εάν έχετε πολλά αριθμητικά πεδία, προτείνω υποκλάσεις UITextField για να δημιουργήσετε ένα NumericTextField που εμφανίζει πάντα ένα αριθμητικό πληκτρολόγιο με κάνει κουμπιού. Στη συνέχεια, απλά συνδέουν τα αριθμητικά πεδία σας με αυτή την τάξη στην Builder Interface και δεν θα χρειάζεται καμία επιπλέον κώδικα σε οποιοδήποτε προβολής σας Ελεγκτές. Το παρακάτω είναι Swift 3.0 τάξη που είμαι με τη χρήση σε 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()
    }
}
Απαντήθηκε 02/10/2016 στις 13:07
πηγή χρήστη

ψήφοι
2

Μπορούμε επίσης να κάνουμε το «χρήστης αγγίξει κάπου αλλού» λύση ακόμα πιο απλή, αν εμείς απλά πείτε τη γνώμη του ελεγκτή άποψη για μας να τελειώσει την επεξεργασία:

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

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

... υποθέτοντας ότι «αγγίζουν αλλού απορρίπτει το πληκτρολόγιο» είναι επιθυμητή συμπεριφορά για οποιοδήποτε άλλο επεξεργάσιμα πεδία στην προβολή, καθώς και.

Απαντήθηκε 06/05/2015 στις 23:46
πηγή χρήστη

ψήφοι
2

Εάν γνωρίζετε εκ των προτέρων ο αριθμός των αριθμών που πρέπει να αναγράφονται (π.χ. 4-ψήφιο PIN) θα μπορούσε αυτόματα να απορρίψει μετά από 4 πατήματα των πλήκτρων, σύμφωνα με την απάντησή μου σε αυτό το παρόμοιο ερώτημα:

απορρίπτοντας αριθμητικό πληκτρολόγιο

Δεν υπάρχει ανάγκη για πρόσθετο γίνει κουμπί σε αυτή την περίπτωση.

Απαντήθηκε 16/05/2013 στις 14:50
πηγή χρήστη

ψήφοι
2

Άλλαξα λύση Bryan να είναι λίγο πιο ισχυρή, έτσι ώστε να παίξει καλά με άλλους τύπους πληκτρολόγια που θα μπορούσαν να εμφανιστούν στην ίδια άποψη. Είναι περιγράφονται εδώ:

Δημιουργήστε ένα ΕΓΙΝΕ κουμπί στο αριθμητικό πληκτρολόγιο iOS UIKeyboard

Θα προσπαθήσω να το εξηγήσω εδώ, αλλά το μεγαλύτερο μέρος του είναι ο κωδικός για να δούμε ότι δεν θα μπορούν να ενταχθούν εύκολα εδώ

Απαντήθηκε 04/10/2012 στις 08:38
πηγή χρήστη

ψήφοι
2

Εδώ είναι η πιο απλή λύση που έχω συναντήσει. Έχω μάθει αυτό από την αρχή iOS 5 Ανάπτυξης.

Αν υποθέσουμε ότι το πεδίο αριθμός καλείται numberField.

  1. Σε ViewController, προσθέστε την ακόλουθη μέθοδο:

    -(IBAction)closeKeyboard:(id)sender;
    
  2. Σε ViewController.m, προσθέστε τον ακόλουθο κώδικα:

    -(IBAction)closeKeyboard:(id)sender
    {
    
         [numberField resignFirstResponder];
    
    }
    
  3. Πηγαίνετε πίσω στο nibαρχείο.

  4. Ανοίξτε Utilitiesτηγάνι.
  5. Ανοίξτε το Identity inspectorπλαίσιο Utilitiesτηγάνι.
  6. Κάντε κλικ στο View(στο αρχείο μύτη) μία φορά. Βεβαιωθείτε ότι δεν έχετε κάνει κλικ σε οποιοδήποτε από τα στοιχεία στην προβολή. Για λόγους σαφήνειας, θα πρέπει να δείτε UIView κάτω από Classτο Identity inspector.
  7. Αλλάξτε την τάξη από UIView να UIControl.
  8. Άνοιγμα Connection Inspector.
  9. Κάντε κλικ και σύρετε Touch Downκαι αποθέστε το βέλος στο File Ownerεικονίδιο. (FYI ... εικονίδιο αρχείου Ιδιοκτήτης εμφανίζεται στα αριστερά του Viewκαι εμφανίζεται ως ένα κούφιο κύβο με κίτρινο πλαίσιο.)
  10. Επιλέξτε τη μέθοδο: closeKeyboard.
  11. Εκτελέστε το πρόγραμμα.

Τώρα, όταν κάνετε κλικ οπουδήποτε στο φόντο της View, θα πρέπει να είναι σε θέση να απορρίψει το πληκτρολόγιο.

Η ελπίδα αυτό βοηθά να λύσετε το πρόβλημά σας. :-)

Απαντήθηκε 12/09/2012 στις 16:07
πηγή χρήστη

ψήφοι
2

Ο απλούστερος τρόπος είναι:

Δημιουργία προσαρμοσμένων διαφανές κουμπί και τοποθετήστε το στο αριστερό κάτω γωνία, η οποία θα έχει ίδια CGSizeόπως κενό χώρο στο UIKeyboardTypeNumberPad. Εναλλαγή (εμφάνιση / απόκρυψη) αυτό το κουμπί για πεδίο κειμένου becomeFirstResponder, στο κουμπί κλικ, αντίστοιχα.

Απαντήθηκε 26/06/2012 στις 12:44
πηγή χρήστη

ψήφοι
2

Περιγράφω μια λύση για iOS 4.2+ εδώ , αλλά το κουμπί απορρίψει εξασθενίζει in μετά εμφανίζεται το πληκτρολόγιο. Δεν είναι τρομερό, αλλά δεν είναι ιδανική, είτε.

Η λύση που περιγράφεται στην ερώτηση που συνδέονται παραπάνω περιλαμβάνει μια πιο κομψή ψευδαίσθηση να απορρίψει το κουμπί, όπου ξεθωριάζει και κάθετα μετατοπίσει το κουμπί για να παρέχει την εμφάνιση που το πληκτρολόγιο και το κουμπί είναι απορρίπτοντας μαζί.

Απαντήθηκε 23/04/2011 στις 22:28
πηγή χρήστη

ψήφοι
1

Για Swift 2.2 μπορώ να χρησιμοποιήσω αυτό το

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()
}
Απαντήθηκε 04/05/2016 στις 08:23
πηγή χρήστη

ψήφοι
0

Swift 2.2 / συνήθιζα απάντηση Dx_ του. Ωστόσο, θα ήθελα αυτή τη λειτουργία σε όλα τα πληκτρολόγια. Έτσι, στην κατηγορία βάση μου έβαλα τον κωδικό:

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

Στη συνέχεια, απλά καλέστε addDoneButtonForTextFields για self.view.subviews σε viewDidLoad (ή willDisplayCell αν χρησιμοποιείτε μια προβολή πίνακα) για να προσθέσετε το κουμπί Τέλος για όλα τα πληκτρολόγια.

Απαντήθηκε 23/08/2016 στις 17:09
πηγή χρήστη

ψήφοι
0

Όλοι όσοι εφαρμογή για την εύρεση την άποψη του πληκτρολογίου και προσθέτοντας το κουμπί γίνεται στην 3η σειρά (αυτός είναι ο λόγος ύψος button.y = 163 b / πληκτρολόγιο c είναι 216) είναι εύθραυστα, επειδή iOS διατηρεί αλλάξετε την ιεραρχία άποψη. Για παράδειγμα, κανένας από τους παραπάνω κωδικούς εργάζονται για iOS9.

Νομίζω ότι είναι πιο ασφαλές να βρείτε ακριβώς το ανώτερο άποψη, από [[[UIApplication sharedApplication] παράθυρα] lastObject], και απλά προσθέστε το κουμπί στο κάτω αριστερή γωνία του, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53)? // κατακόρυφο προσανατολισμό

Απαντήθηκε 07/12/2015 στις 09:36
πηγή χρήστη

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