nasıl gösterilir "Bitti" butonuna iPhone sayı tuş takımındaki

oy
208

Rakam tuş takımında hayır Bitti düğmesi bulunur. Kullanıcı bir metin alanına sayısal bilgilerin girilmesi tamamlandığında, nasıl sayısal tuş takımı yok edebilirim?

Varsayılan klavyeyi kullanarak bir Bitti butonuna alabilir, ancak daha sonra kullanıcıların giriş numaralarına sırayla sayısal tuşlarına geçmek zorunda kalacaktı. Rakam tuş takımında bir Bitti düğmesini göstermek için bir yolu var mı?

Oluştur 25/02/2009 saat 03:45
kaynak kullanıcı
Diğer dillerde...                            


21 cevaplar

oy
321

Başka bir çözüm. Mükemmel ekranda olmayan diğer sayısal tuş takımı metin alanları varsa.

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];
}
Cevap 08/07/2012 saat 10:26
kaynak kullanıcı

oy
37

İşte Swift için Luda cevabı için bir uyarlamasıdır:

senin UIViewController alt sınıf put bildiride

let numberToolbar: UIToolbar = UIToolbar()

ViewDidLoad koymak:

    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 

ve işlevleri çember ve çember (sadece buna göre viewDidLoad selektör isimlerini değiştirmek, başka adları seçmek için çekinmeyin eklemek

func boopla () {
    textField.resignFirstResponder()
}

func hoopla () {
    textField.text=""
    textField.resignFirstResponder()
}
Cevap 24/02/2015 saat 22:24
kaynak kullanıcı

oy
14

Kullanılan gördünüz ettik hile özel şeffaf düğmeye bütün bakış boyutunu yapmaktır ve daha sonra tıklama yönteminde, metin alanı ilk yanıtlayıcısını istifa var. Yani kullanıcı tuş takımını kapatmak için alanın dışında herhangi bir yeri tıklayabilirsiniz.

Cevap 25/02/2009 saat 05:07
kaynak kullanıcı

oy
11

Çözüm UIKeyboardTypeNumberPad ve eksik dönüş tuşu harika çalışıyor ancak ekranda hiçbir olmayan diğer sayısal tuş takımı metin alanları vardır sadece.

Ben bu kodu alıp sadece sayı pedleri çalışması için alt sınıf bir UIViewController dönüştürdü. Yukarıdaki bağlantıdan simgeleri almak gerekir.

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

ve 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

Keyfini çıkarın.

Cevap 05/08/2010 saat 21:16
kaynak kullanıcı

oy
9

Aşağıda aşağıdaki değişikliklerle birlikte Luda cevabı bir revizyon geçerli:

  • Aksesuar görünümü otomatik uygulama çerçevesinde genişliğine boyutlandırılır

  • kaldırılan sabit UIBarButtonItemStyleBorderedönlenir

  • "Bitti" düğmesi olarak örneği UIBarButtonSystemItemDone

Şu anda "Bitti" butonuna aksesuar görünümünde ortalanır. Sen uygun tarafındaki boşluk silerek sola veya sağa üstünde yerleştirebilmenizdir.

Varsayılan klavye ikisinden birini olmadığı için bir "İptal" butonuna atladık. Eğer bir "İptal" butonuna istiyorsun, ben size bir olarak örneğini göstermektedir UIBarButtonSystemItemCancelve size metin alanındaki özgün değer atarak değiliz emin olun. Boş bir dize ile değer üzerine yazar Luda cevabı, uygulanan "İptal" davranışı, istediğini olmayabilir.

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

Aksesuar görüşlerini oluşturma hakkında daha fazla bilgi için, Apple belgelerine bakın veri girişi için özel görünümler . Muhtemelen referans sayfalarına başvurun isteyeceksiniz UIToolbar ve UIBarButtonItem de.

Cevap 16/07/2015 saat 10:16
kaynak kullanıcı

oy
6

Bir çok daha kolay çözüm

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

    [textViewInstance1 resignFirstResponder];
    [textViewInstance2 resignFirstResponder];
    [textField resignFirstResponder];
}
Cevap 04/08/2011 saat 12:01
kaynak kullanıcı

oy
6

İşte en son kodudur. Basitçe ViewController içinde "UIViewController + NumPadReturn.h" alma kullanan içerir.

İşte .h olduğunu

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

@interface UIViewController (NumPadReturn)



@end

Ve onları

#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
Cevap 04/12/2010 saat 21:57
kaynak kullanıcı

oy
5

Bu forum sonrası klavyenin üzerine Özel görünüm eklemek için UIKeyboard özelleştirmek açıklamaktadır.

Cevap 25/02/2009 saat 05:48
kaynak kullanıcı

oy
3

3,0 SWIFT önceki bazı cevaplar parçalarını kullanarak farklı bir lezzet.

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()
}
Cevap 11/09/2017 saat 11:41
kaynak kullanıcı

oy
3

Bir Swift 3 bir uzantı ile çözelti. Birkaç sayısal varsa İdeal UITextFieldo her biri için, karar esnekliği sağlar uygulamanıza nesneleri UITextFieldzaman özel bir eylemi gerçekleştirmek için, ister Done veya iptal vurulur.

Burada görüntü açıklama girin

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

kullanım varsayılan eylemleri kullanma örneği:

//
// MyViewController.swift
//

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

Özel bir ile kullanım örneği yapılan işlem:

//
// MyViewController.swift
//

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

func doneButtonTappedForMyNumericTextField() { 
    print("Done"); 
    myNumericTextField.resignFirstResponder() 
}
Cevap 19/08/2017 saat 11:40
kaynak kullanıcı

oy
2

Bulduğum @ user1258240 cevabını bu bir ayar kadar basit değil verilen oldukça özlü olmak returnKeyTypeözelliğini.

Sadece bu benim kendi "Çok kullanımlık" bir yaklaşım katkıda bulunmak istedik:

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)
}
Cevap 04/11/2016 saat 05:34
kaynak kullanıcı

oy
2

Birden sayısal alanlar varsa, sınıflara UITextField hep yapılır tuşuyla sayısal klavyeyi görüntüleyen bir NumericTextField oluşturmak öneriyoruz. Ardından hemen Interface Builder Bu sınıfa ile sayısal alanlar ilişkilendirmek ve size Görünüm Kontrolörleri hiçbirinde ek kod gerekmez. Aşağıdaki Xcode 8.0 kullanıyorum 3.0 sınıf Swift olduğunu.

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()
    }
}
Cevap 02/10/2016 saat 13:07
kaynak kullanıcı

oy
2

Ayrıca yapabilir "kullanıcı başka bir yere dokundu" biz sadece düzenleme sonuna kadar bizim bakış kontrolörün görünümü söylerseniz çözüm daha da basit:

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

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

... yanı görünümü üzerinde herhangi bir diğer düzenlenebilir alanlar için davranışını isteniyorsa "başka bir yere dokunarak klavye görevden" varsayarak.

Cevap 06/05/2015 saat 23:46
kaynak kullanıcı

oy
2

Önceden biliyorsanız numaralarının sayısı (örn 4 haneli PIN) benim Yanıt başına bu benzer soruya, 4 tuşa basma sonra otomatik görevden olabilir girilecek:

Sayı Pad görevden

Bu durumda ek bir tamamlandı düğmesini gerek yok.

Cevap 16/05/2013 saat 14:50
kaynak kullanıcı

oy
2

Bunların aynı görünümde görünebilir klavyeler diğer türleri ile güzel oynamak böylece, biraz daha sağlam olması için Bryan'ın çözümünü güncellenmiştir. Burada açıklanandan:

iOS numpad üzerinde bir YAPILAN Oluştur düğmesini UIKeyboard

Burada anlatmaya çalışacaktı, ama bunun çoğu kolayca burada uygun olmaz buna bakmak koddur

Cevap 04/10/2012 saat 08:38
kaynak kullanıcı

oy
2

İşte rastlamak basit çözüm bu. Ben iOS 5 Geliştirme kitabı başlayarak bu öğrendik.

Numarası alanını varsayarsak denir numberField.

  1. Olarak ViewController, aşağıdaki yöntemi ekleyin:

    -(IBAction)closeKeyboard:(id)sender;
    
  2. Olarak ViewController.m, aşağıdaki kodu ekleyin:

    -(IBAction)closeKeyboard:(id)sender
    {
    
         [numberField resignFirstResponder];
    
    }
    
  3. Geri Dön nibdosya.

  4. Açık Utilitiestava.
  5. Identity inspectoraltında Utilitiestava.
  6. Tıklayın View(uç dosyasında) bir kere. Eğer görünümünde öğelerin herhangi tıklanmayan emin olun. Açıklama uğruna, sen altında UIView görmelisiniz Classiçinde Identity inspector.
  7. UIControl için UIView gelen sınıfını değiştirin.
  8. Connection Inspector.
  9. Tıklayın sürüklemek Touch Downve üzerindeki oku damla File Ownersimgesi. (Bilginize ... Dosya Sahibi simgesi solunda görüntülenir Viewve sarı çerçeve ile içi boş bir küp olarak görünür.)
  10. Yöntemini seçin: closeKeyboard.
  11. Programı çalıştır.

Eğer arka plan üzerinde herhangi bir yere tıkladığınızda Şimdi View, klavyeyi kapatmak mümkün olmalıdır.

bu sorunu çözmek yardımcı olur. :-)

Cevap 12/09/2012 saat 16:07
kaynak kullanıcı

oy
2

En basit yoludur:

Create özel şeffaf düğme ve aynı olacak aşağı sol köşesinde, yerleştirin CGSizeboş alan olarak UIKeyboardTypeNumberPad. Geçiş (göstermek / gizlemek) TextField üzerinde bu düğmeye becomeFirstRespondersırasıyla düğmesi tıklandığında,.

Cevap 26/06/2012 saat 12:44
kaynak kullanıcı

oy
2

Ben iOS için bir çözüm tarif 4.2+ burada ama klavyesi görünür sonra görevden düğmesi yavaş yavaş ortaya çıkar. Ya İdeal korkunç değil değil.

Yukarıda bağlı söz tarif edilen çözüm, I solmaya renkli, kapatma ve dikey olarak tuş takımı ve düğme birlikte işten olan bir görünüm sağlamak için düğmeye değiştirmesi için daha şık bir yanılsama içerir.

Cevap 23/04/2011 saat 22:28
kaynak kullanıcı

oy
1

Swift 2.2 için bunu kullanabilir

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()
}
Cevap 04/05/2016 saat 08:23
kaynak kullanıcı

oy
0

Swift 2.2 / I Dx_ cevabını kullandı. Ancak, ben bütün klavyelerde bu işlevi istedi. Yani benim taban sınıfta ben kodu koyun:

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

(Bir tablo görünümünü kullanarak veya eğer willDisplayCell) tüm klavyeler için Bitti düğmesini eklemek Sonra sadece viewDidLoad self.view.subviews üzerinde addDoneButtonForTextFields diyoruz.

Cevap 23/08/2016 saat 17:09
kaynak kullanıcı

oy
0

iOS Görünüm hiyerarşisi değiştirmek tutar çünkü 3 sıraya tamam düğmesini klavye görünümü bulma ve ekleme hakkında onca uygulama (button.y = 163 b / c klavyenin yüksekliği 216 olmasının sebebi de budur) kırılgandır. Yukarıdaki kodların örneği hiçbiri için iOS9 için çalışıyorum.

Ben, ve sadece sol alt köşesinde, doneButton.frame = CGRectMake (0 düğme eklemek [pencereler] lastObject [[UIApplication sharedApplication]] tarafından, sadece en üstteki görünümü bulmak daha güvenlidir SCREEN_HEIGHT-53, 106 düşünüyorum , 53); // dikey modu

Cevap 07/12/2015 saat 09:36
kaynak kullanıcı

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