Hvordan vise "Done" knappen på iPhone talltastaturet

stemmer
213

Det er ingen Ferdig -knappen på det numeriske tastaturet. Når en bruker er ferdig å legge inn numerisk informasjon i et tekstfelt, hvordan kan jeg gjøre det numeriske tastaturet forsvinne?

Jeg kunne få en Done knappen ved hjelp av standard tastatur, men da brukerne måtte bytte til talltastene for å taste inn tall. Er det en måte å vise en Ferdig -knappen på det numeriske tastaturet?

Publisert på 25/02/2009 klokken 02:45
kilden bruker
På andre språk...                            


21 svar

stemmer
326

En annen løsning. Perfekt hvis det er andre ikke-numeriske tastaturet tekstfelt på skjermen.

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];
}
Svarte 08/07/2012 kl. 09:26
kilden bruker

stemmer
43

Her er en tilpasning for Luda svar for Swift:

I erklæringen av UIViewController underklasse put

let numberToolbar: UIToolbar = UIToolbar()

i viewDidLoad sagt:

    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 

og legge til funksjoner hoopla og hoopla (gjerne velge andre navn, bare endre velger navnene i viewDidLoad tilsvar

func boopla () {
    textField.resignFirstResponder()
}

func hoopla () {
    textField.text=""
    textField.resignFirstResponder()
}
Svarte 24/02/2015 kl. 22:24
kilden bruker

stemmer
14

Trikset jeg har sett brukt er å lage en tilpasset gjennomsiktig knapp størrelsen på hele visningen og deretter i sin klikk-metoden, har tekstfeltet fratre første responder. Slik at brukeren kan klikke hvor som helst utenfor feltet for å avvise tastaturet.

Svarte 25/02/2009 kl. 04:07
kilden bruker

stemmer
11

Løsningen i UIKeyboardTypeNumberPad og mangler retur-tasten fungerer bra, men bare hvis det ikke finnes andre ikke-numeriske tastaturet tekstfelt på skjermen.

Jeg tok den koden og slått den inn i en UIViewController at du bare kan underklasse å gjøre Talltastatur fungere. Du må få ikonene fra koblingen ovenfor.

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

og 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

Nyt.

Svarte 05/08/2010 kl. 20:16
kilden bruker

stemmer
9

Nedenfor er en overhaling av Luda svar med følgende endringer:

  • tilbehøret vis automatisk dimensjonert til bredden av appliseringsrammen

  • det ugyldige konstant UIBarButtonItemStyleBorderedunngås

  • på "Ferdig" -knappen startes som en UIBarButtonSystemItemDone

I dag den "Ferdig" -knappen er sentrert i tilbehørs visningen. Du kan plassere den til venstre eller høyre ved å slette plass på relevant side.

Jeg har utelatt en "Avbryt" knappen fordi standard tastaturet ikke har en heller. Hvis du ønsker en "Avbryt" knappen, foreslår jeg at du instantiate det som en UIBarButtonSystemItemCancel, og at du sørge for at du ikke forkaster den opprinnelige verdien i tekstfeltet. "Avbryt" oppførsel implementert i Luda svar, som overskriver verdien med en tom streng, er kanskje ikke det du ønsker.

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

For mer informasjon om å bygge tilbehør visninger, se på Apple dokumentasjon på egendefinerte visninger for data input . Du vil sannsynligvis ønske å konsultere referansesidene på UIToolbar og UIBarButtonItem også.

Svarte 16/07/2015 kl. 10:16
kilden bruker

stemmer
6

En mye enklere løsning

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

    [textViewInstance1 resignFirstResponder];
    [textViewInstance2 resignFirstResponder];
    [textField resignFirstResponder];
}
Svarte 04/08/2011 kl. 11:01
kilden bruker

stemmer
6

Her er den nyeste kode. Bare ta #import "UIViewController + NumPadReturn.h" i viewController.

Her er .h

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

@interface UIViewController (NumPadReturn)



@end

Og dem

#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
Svarte 04/12/2010 kl. 20:57
kilden bruker

stemmer
5

En Swift 3- løsning ved hjelp av en forlengelse. Ideelt hvis du har flere numeriske UITextFieldobjekter i din app som det gir fleksibilitet til å bestemme, for hver UITextField, om å utføre en egendefinert handling når Ferdig eller Avbryt tappes.

skriv bildebeskrivelse her

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

Eksempel på bruk med standard handlinger:

//
// MyViewController.swift
//

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

Eksempel på bruk ved anvendelse av en tilpasset Ferdig handling:

//
// MyViewController.swift
//

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

func doneButtonTappedForMyNumericTextField() { 
    print("Done"); 
    myNumericTextField.resignFirstResponder() 
}
Svarte 19/08/2017 kl. 11:40
kilden bruker

stemmer
5

Dette forum innlegg beskriver hvordan du tilpasser UIKeyboard å legge til egendefinert visning på tastaturet.

Svarte 25/02/2009 kl. 04:48
kilden bruker

stemmer
4

Jeg fant @ user1258240 svar å være ganske kortfattet gitt dette er ikke så enkelt som å sette en returnKeyTypeeiendom.

Ville bare bidra med min egen "re-brukbare" tilnærming til dette:

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)
}
Svarte 04/11/2016 kl. 05:34
kilden bruker

stemmer
3

SWIFT 3.0 En annen smak, ved hjelp av deler av noen tidligere svar.

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()
}
Svarte 11/09/2017 kl. 11:41
kilden bruker

stemmer
2

Hvis du har flere numeriske felt, foreslår jeg subclassing UITextField å skape en NumericTextField som alltid viser et numerisk tastatur med en ferdig knapp. Deretter kan du enkelt knytte numeriske felt med denne klassen i Interface Builder, og du trenger ikke noen ekstra kode i noen av dine Se Controllers. Følgende er Swift 3,0 klasse som jeg bruker i 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()
    }
}
Svarte 02/10/2016 kl. 13:07
kilden bruker

stemmer
2

Vi kan også gjøre "bruker rørte et annet sted" løsningen enda enklere om vi bare fortelle vårt syn kontrolleren syn til slutt redigering:

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

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

... forutsatt at "berøre andre steder avviser tastaturet" er ønsket atferd for andre redigerbare felt på visningen også.

Svarte 06/05/2015 kl. 23:46
kilden bruker

stemmer
2

Hvis du vet på forhånd hvor mange tall som skal angis (f.eks en 4-sifret PIN-kode) kan du automatisk avvise etter 4 tastetrykk, som per mitt svar på denne lignende spørsmål:

forkaster Number Pad

Ikke behov for en ekstra knappen ferdig i dette tilfellet.

Svarte 16/05/2013 kl. 13:50
kilden bruker

stemmer
2

Jeg endret Bryan løsning å være litt mer robust, slik at det ville spille pent med andre typer tastaturer som kan vises i samme visning. Det er beskrevet her:

Lag en FERDIG-knappen på iOS numpad UIKeyboard

Jeg vil prøve å forklare det her, men det meste er koden for å se på som ikke ville lett passer her

Svarte 04/10/2012 kl. 07:38
kilden bruker

stemmer
2

Her er den enkleste løsningen jeg har kommet over. Jeg har lært dette fra begynnelsen iOS 5 Utvikling bok.

Forutsatt at nummerfeltet kalles numberField.

  1. I ViewControllerlegger du til følgende metode:

    -(IBAction)closeKeyboard:(id)sender;
    
  2. I ViewController.mlegger du til følgende kode:

    -(IBAction)closeKeyboard:(id)sender
    {
    
         [numberField resignFirstResponder];
    
    }
    
  3. Gå tilbake til nibfil.

  4. Åpne Utilitiespanne.
  5. Åpne Identity inspectorhenhold Utilitiespannen.
  6. Klikk på View(i NIB-fil) en gang. Pass på at du ikke har klikket på noen av elementene i visningen. For å få til en avklaring, skal du se UIView etter Classi Identity inspector.
  7. Endre klasse fra UIView til UIControl.
  8. Åpne Connection Inspector.
  9. Klikk og dra Touch Downog slippe pilen på File Ownerikonet. (FYI ... File Type vises ikonet til venstre View, og ser ut som en hul kube med gul ramme.)
  10. Velg metoden: closeKeyboard.
  11. Kjør programmet.

Nå når du klikker hvor som helst på bakgrunn av View, bør du være i stand til å skjule tastaturet.

Håper dette hjelper deg med å løse problemet. :-)

Svarte 12/09/2012 kl. 15:07
kilden bruker

stemmer
2

Den enkleste måten er:

Lag tilpassede gjennomsiktig knappen og legg den i venstre ned hjørnet, som vil ha samme CGSizesom tomrom i UIKeyboardTypeNumberPad. Toggle (vis / skjul) denne knappen på tekstfeltet becomeFirstResponder, på knapp klikk hhv.

Svarte 26/06/2012 kl. 11:44
kilden bruker

stemmer
2

Jeg beskriver en løsning for iOS 4.2 + her , men avviser knappen fades inn etter tastaturet vises. Det er ikke forferdelig, men ikke ideelt heller.

Løsningen som er beskrevet i den aktuelle koblet over inkluderer en mer elegant illusjon å fjerne knappen, hvor jeg fade og vertikalt forskyve for å gi inntrykk av at tastaturet og knappen er forkaster sammen.

Svarte 23/04/2011 kl. 21:28
kilden bruker

stemmer
1

For Swift 2.2 bruker jeg denne

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()
}
Svarte 04/05/2016 kl. 08:23
kilden bruker

stemmer
0

Swift 2.2 / jeg brukte Dx_ svar. Men jeg ønsket denne funksjonaliteten på alle tastaturer. Så i min base klasse satte jeg inn koden:

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

Så bare ringe addDoneButtonForTextFields på self.view.subviews i viewDidLoad (eller willDisplayCell hvis du bruker en tabellvisning) for å legge på Ferdig-knappen til alle tastaturer.

Svarte 23/08/2016 kl. 17:09
kilden bruker

stemmer
0

Alle de implementering om å finne tastaturet visning og legge knappen ferdig på tredje rad (det er derfor button.y = 163 b / c tastaturets høyde er 216) er skjøre fordi iOS holder endre visningen hierarkiet. For eksempel ingen av ovennevnte kodene fungerer for iOS9.

Jeg tror det er mer trygt å bare finne den øverste visningen av [[[UIApplication sharedApplication] vinduer] lastObject], og bare legge på knappen nederst i venstre hjørne av det, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53); // stående modus

Svarte 07/12/2015 kl. 09:36
kilden bruker

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