আইফোন নম্বর প্যাডে "সম্পন্ন" বোতামটি কীভাবে প্রদর্শিত হবে


237

নম্বর প্যাডে কোনও "সম্পন্ন" বোতাম নেই। যখন কোনও ব্যবহারকারী কোনও পাঠ্য ক্ষেত্রে সংখ্যার তথ্য প্রবেশ করা শেষ করে, আমি কীভাবে নম্বর প্যাড অদৃশ্য করতে পারি?

আমি ডিফল্ট কীবোর্ড ব্যবহার করে একটি "সম্পন্ন" বোতামটি পেতে পারি, তবে তারপরে ব্যবহারকারীদের সংখ্যা ইনপুট করতে সংখ্যাসূচক কীগুলিতে স্যুইচ করতে হবে। নম্বর প্যাডে "সম্পন্ন" বোতামটি দেখানোর কোনও উপায় আছে কি?

উত্তর:


339

আর একটি সমাধান। স্ক্রিনে অন্য সংখ্যাবিহীন প্যাড পাঠ্য ক্ষেত্র থাকলে নিখুঁত।

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

1
এটি সম্পাদন করার সর্বোত্তম উপায় কোনও সন্দেহ নেই। স্পষ্টভাবে কারণ এটি আপেলকে কঠোর এইচআইজি মেনে চলে।
হুবার্ট কুননেমায়ার

3
অনস্ক্রিন কীবোর্ডের যে কোনও গ্রাফিকাল পরিবর্তনগুলি এটি ভেঙে দেবে অন্য সমাধানটি খুব ভঙ্গুর।
কাইলুন

যদি একাধিক পাঠ্য ক্ষেত্র থাকে তবে আমি কীভাবে নির্ধারণ করব যে কোন ইউআইটিেক্সটফিল্ডটি সম্পাদিত হচ্ছে?
নাট

আপনার ইউআইটিেক্সটফিল্ডটিকে .h এ ইনস্ট্যান্স ভেরিয়েবল হিসাবে সংজ্ঞায়িত করুন।
লুদা

3
@ বেনপোটার আপনি বারটির জন্য বারটিন্ট সেট করবেন এবং পাঠ্যের জন্য টিন্টের রঙ দিন। আপনি ইনটালাইজারের পাশের UIBarButton আইটেমগুলিও তৈরি করতে পারেন এবং তাদের জন্য রঙ সেখানে স্পষ্টভাবে সেট করতে পারেন।
ocross

50

সুইফটের জন্য লুডার উত্তরের জন্য এখানে একটি অভিযোজন রয়েছে:

আপনার ইউআইভিউউকন্ট্রোলার সাবক্লাসের ঘোষণায়

let numberToolbar: UIToolbar = UIToolbar()

ভিউডিডলডে রাখুন:

    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 

এবং ফাংশন হুপলা এবং হুপলা যুক্ত করুন (অন্যান্য নাম চয়ন করতে নির্দ্বিধায়, কেবল সেই অনুযায়ী ViewDidLoad এ নির্বাচকের নাম পরিবর্তন করুন

func boopla () {
    textField.resignFirstResponder()
}

func hoopla () {
    textField.text=""
    textField.resignFirstResponder()
}

1
UIBarButtonItemStyle.Borderedআইওএস 8.0 থেকে অবহেলিত। UIBarButtonItemStyle.Plainপরিবর্তে প্রস্তাবিত হয়।
জনি

নির্বাচকগুলিকে আপডেট করতে হবে: # নির্বাচক (আপনার ভিউকন্ট্রোলআর.বুপলা)
ডেভিড ভি

জনি এবং ডেভিড সম্ভবত ঠিক আছে। আমি আর আইওএসের জন্য প্রোগ্রামিং করছি না তাই আমি পরিবর্তনগুলি অনুসরণ করি না। যদি কেউ একটি আপডেট সমাধান পোস্ট করে তবে আমি এটিকে একটি সম্পাদনায় উল্লেখ করব।
ব্যবহারকারী 1258240

14

আমি যে কৌশলটি ব্যবহার করেছি তা হ'ল একটি কাস্টম স্বচ্ছ বোতামটি পুরো ভিউটির আকার এবং তার ক্লিক পদ্ধতিতে, পাঠ্য ক্ষেত্রটিকে প্রথমে পদত্যাগকারীকে পদত্যাগ করুন। তাই ব্যবহারকারী কীপ্যাডটি খারিজ করতে মাঠের বাইরের যে কোনও জায়গায় ক্লিক করতে পারেন।


3
আমি রিটার্ন কী ছাড়াও এটি করেছি। এটি অনেক বেশি ব্যবহারকারী-বান্ধব অ্যাপ্লিকেশন তৈরি করে। আমি রিটার্ন কী এবং যে কোনও জায়গায় ক্লিকের রিটার্ন পদ্ধতিতে উভয়ই দিতে চাই।
IcyBlueRose

4
এখন আমাদের ইউআইজিস্টারআর সনাক্তকারী রয়েছে, কেবলমাত্র মূল ভিউকন্ট্রোলার ভিউতে একটি ট্যাপ অঙ্গভঙ্গি সনাক্তকারী সেট আপ করুন এবং এটি এডিটিং: হ্যাঁ এর দর্শনটিতে প্রেরণ করুন। এটি প্রতিটি পাঠ্যক্ষেত্রের জন্য কীবোর্ডটি বন্ধ করে দেবে যা কীবোর্ডের বাইরে স্পর্শ করার সময় কীবোর্ডটি সার্ভিসিং করতে পারে।
চাদবাগ

14

একটি সুইফট 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() 
}

12

নীচে নীচের পরিবর্তনগুলির সাথে লুডার জবাবের একটি সংক্ষিপ্ত বিবরণ দেওয়া হল:

  • অ্যাকসেসরির ভিউটি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন ফ্রেমের প্রস্থে আকার দেওয়া হবে

  • অবচয় ধ্রুবক UIBarButtonItemStyleBorderedএড়ানো হয়

  • "সম্পন্ন" বোতামটি একটি হিসাবে তাত্ক্ষণিকভাবে চালু হয় UIBarButtonSystemItemDone

বর্তমানে "সম্পন্ন" বোতামটি আনুষঙ্গিক দৃশ্যে কেন্দ্রিক। প্রাসঙ্গিক দিকের স্থানটি মুছে ফেলে আপনি এটিকে বাম বা ডানদিকে অবস্থান করতে পারেন।

আমি একটি "বাতিল" বোতাম বাদ দিয়েছি কারণ ডিফল্ট কীবোর্ডের একটিও নেই। আপনি যদি "বাতিল" বোতামটি চান তবে আমি আপনাকে এটি হিসাবে একটি ইনস্ট্যান্ট করার পরামর্শ দিই UIBarButtonSystemItemCancelএবং আপনি নিশ্চিত হয়ে নিন যে আপনি আপনার পাঠ্য ক্ষেত্রে মূল মানটি বর্জন করছেন না। লুডার উত্তরে "বাতিল" আচরণ কার্যকর করা হয়েছে, যা একটি ফাঁকা স্ট্রিংয়ের সাথে মানকে ওভাররাইট করে, আপনি যা চান তা নাও হতে পারে।

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

আনুষঙ্গিক দর্শনগুলি তৈরি সম্পর্কে আরও তথ্যের জন্য, ডেটা ইনপুটটির জন্য কাস্টম ভিউগুলিতে অ্যাপল ডকুমেন্টেশন দেখুন । আপনি সম্ভবত ইউআইটিউলবার এবং ইউআইবারবারটন আইটেমের রেফারেন্স পৃষ্ঠাগুলির সাথে পরামর্শ করতে চাইবেন


[UIScreen mainScreen].applicationFrameআইওএস 9 [UIScreen mainScreen].bounds
-এ অবহেলা

11

UIKeyboardTypeNumberPad এবং অনুপস্থিত রিটার্ন কী-তে সমাধানটি কেবল দুর্দান্ত কাজ করে তবেই যদি স্ক্রিনে অন্য কোনও অ-সংখ্যা প্যাড পাঠ্য ক্ষেত্র না থাকে।

আমি সেই কোডটি নিয়েছি এবং এটিকে একটি ইউআইভিউকন্ট্রোলারে পরিণত করেছি যাতে আপনি কেবল সংখ্যা প্যাডগুলি কাজ করতে সাবক্লাস করতে পারেন। উপরের লিঙ্কটি থেকে আপনার আইকনগুলি পেতে হবে।

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

এবং সংখ্যাপ্যাডভিউকন্ট্রোলআরএম:

#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

উপভোগ করুন।


6

এখানে সর্বাধিক সাম্প্রতিক কোড। আপনার ভিউকন্ট্রোলারে কেবল # ইম্পোর্ট "ইউআইভিউউকন্ট্রোলার + নুমপ্যাডের্টন.হ." অন্তর্ভুক্ত করুন।

এখানে .h

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

@interface UIViewController (NumPadReturn)



@end

এবং তাদের

#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

এটি সিমুলেটরটিতে কাজ করছে বলে মনে হচ্ছে তবে ডিভাইসে ... আমি খালি জায়গাটি ট্যাপ করার সময় না ডোন বোতামটি দেখতে পাচ্ছি না এবং কিছুই ঘটবে না ... কোনও ধারণা?
xoail

14
বাহ, দয়া করে এই কোডটি ব্যবহার করবেন না। আপনি কোনও বিভাগের মধ্যে থেকে শ্রেণিবদ্ধের পদ্ধতিগুলিকে ওভাররড করবেন, যা আপনার ইউআইভিউকন্ট্রোলার শ্রেণীর "রিয়েল" ভিউডিডলড, ইত্যাদি উপেক্ষা করবে।
টনি আর্নল্ড

6

অনেক সহজ সমাধান

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

    [textViewInstance1 resignFirstResponder];
    [textViewInstance2 resignFirstResponder];
    [textField resignFirstResponder];
}

5

আপনার যদি একাধিক সংখ্যাসূচক ক্ষেত্র থাকে, তবে আমি একটি নুমারিকেক্সটফিল্ড তৈরি করতে UITextField উপশ্রেণীত করার পরামর্শ দিচ্ছি যা সর্বদা একটি সম্পন্ন বোতামের সাথে একটি সংখ্যাসূচক কীবোর্ড প্রদর্শন করে। তারপরে, কেবলমাত্র আপনার সংখ্যাসূচক ক্ষেত্রগুলি ইন্টারফেস বিল্ডারে এই শ্রেণীর সাথে সংযুক্ত করুন এবং আপনার কোনও ভিউ কন্ট্রোলারগুলিতে কোনও অতিরিক্ত কোডের প্রয়োজন হবে না। নিম্নলিখিতটি সুইফট class.০ শ্রেণি যা আমি এক্সকোড ৮.০ এ ব্যবহার করছি।

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

সুইফট 4.2

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: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil)
        let callback = #selector(NumericTextField.finishedEditing)
        let donebutton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: callback)
        numericKbdToolbar.setItems([space, donebutton], animated: false)
        numericKbdToolbar.sizeToFit()
        self.inputAccessoryView = numericKbdToolbar
    }

    // MARK: On Finished Editing Function
    @objc func finishedEditing()
    {
        self.resignFirstResponder()
    }
}

আমি আপনার উপ-শ্রেণীর সমাধান পছন্দ করি।
AechoLiu

5

আমি ব্যবহারকারীর 1258240 এর উত্তরটি বেশ সংক্ষিপ্ত হতে দেখলাম যে এটি returnKeyTypeসম্পত্তি সেট করার মতো সহজ নয় ।

কেবল এটির জন্য আমার নিজের "পুনরায় ব্যবহারযোগ্য" পদ্ধতির অবদান রাখতে চেয়েছিলেন:

func SetDoneToolbar(field:UITextField) {
    let doneToolbar:UIToolbar = UIToolbar()

    doneToolbar.items=[
        UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: self, action: nil),
        UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.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)
}

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

2

আমি এখানে আইওএস 4.2+ এর একটি সমাধান বর্ণনা করছি তবে কীবোর্ডটি উপস্থিত হওয়ার পরে বরখাস্ত বোতামটি ম্লান হয়ে যায়। এটি ভয়ানক নয়, তবে আদর্শও নয়।

উপরে লিঙ্কিত প্রশ্নে বর্ণিত সমাধানের মধ্যে বোতামটি খারিজ করার জন্য আরও মার্জিত মায়া অন্তর্ভুক্ত রয়েছে, যেখানে আমি কীপ্যাড এবং বোতামটি একসাথে খারিজ করে দিচ্ছি এমন উপস্থিতিটি সরবরাহ করতে বোতামটি বিবর্ণ এবং উল্লম্বভাবে স্থানান্তরিত করব।


2

সবচেয়ে সহজ উপায় হল:

তৈরি করুন কাস্টম স্বচ্ছ বোতাম এবং নিচে বাম কোনায়, যা একই থাকবে রাখুন CGSizeফাঁকা স্থান হিসাবে UIKeyboardTypeNumberPad। পাঠ্যফিল্ডে becomeFirstResponderএই বোতামটি যথাক্রমে বোতামে ক্লিক করুন (দেখান / লুকান) og


2

এখানে আমি যে সহজ সমাধানটি পেয়েছি তা এখানে। আমি বিগনিং আইওএস 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. ক্লাসটি ইউআইভিউ থেকে ইউআইসিএন্ট্রোল এ পরিবর্তন করুন।
  8. খোলা Connection Inspector
  9. আইকনের Touch Downতীরটি ক্লিক করে টেনে আনুন এবং ফেলে দিন File Owner। (এফওয়াইআই ... ফাইলের মালিকের আইকনটি বাম দিকে Viewপ্রদর্শিত হবে এবং হলুদ ফ্রেমের সাথে ফাঁকা কিউব হিসাবে উপস্থিত হবে))
  10. পদ্ধতি নির্বাচন করুন: closeKeyboard
  11. প্রোগ্রাম চালান।

এখন আপনি যখন পটভূমিতে যে কোনও জায়গায় ক্লিক করেন View, আপনার কীবোর্ড খারিজ করতে সক্ষম হওয়া উচিত।

আশা করি এটি আপনার সমস্যার সমাধানে সহায়তা করবে। :-)


2

ব্রায়ানের সমাধানটি আরও কিছুটা শক্তিশালী করার জন্য আমি সংশোধন করেছি, যাতে এটি একই ধরণের উপস্থিত অন্যান্য কীবোর্ডগুলির সাথে দুর্দান্ত খেলতে পারে। এটি এখানে বর্ণিত:

আইওএসের নামপ্যাড ইউআইকিবোর্ডে একটি ডোন বোতাম তৈরি করুন

আমি এখানে এটি ব্যাখ্যা করার চেষ্টা করব, তবে এটির বেশিরভাগ কোডটি এখানে সহজেই মানায় না code


এটিই সেরা সমাধান যা আমি এক্সকোড ৪.৪ এর জন্য খুঁজে পেয়েছি এবং এটি আইওএস 6.0 এর সাথে কাজ করে। এটি সংখ্যার কীবোর্ডে একটি ডোন বোতাম যুক্ত করে। ডোন বোতাম গ্রাফিক্স পেতে মূল পোস্টে যান। neoos.ch/blog/…
বার্ডম্যান

2

যদি আপনি আগেই প্রবেশ করানো সংখ্যার সংখ্যা জানেন (যেমন একটি 4-অঙ্কের পিন) আপনি এই জাতীয় প্রশ্নের আমার উত্তর অনুসারে 4 টি কী প্রেসের পরে স্বয়ংক্রিয়ভাবে বরখাস্ত করতে পারেন:

সংখ্যা প্যাড বরখাস্ত

এই ক্ষেত্রে অতিরিক্ত সম্পন্ন বোতামের দরকার নেই।


2

আমরা যদি সম্পাদন শেষ করতে আমাদের দৃষ্টিভঙ্গি নিয়ন্ত্রকের দৃষ্টিভঙ্গিটি কেবলমাত্র বলি তবে আমরা "ব্যবহারকারী অন্য কোথাও ছোঁয়া" সমাধানটিকে আরও সহজ করে তুলতে পারি :

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

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

... ধরে নিয়ে যে "অন্য কোথাও স্পর্শ করার ফলে কীবোর্ডকে বরখাস্ত করা হয়" এই দৃশ্যের পাশাপাশি অন্য কোনও সম্পাদনাযোগ্য ক্ষেত্রের জন্য পছন্দসই আচরণ।


1

সুইফট ২.২ এর জন্য আমি এটি ব্যবহার করি

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

0

তৃতীয় সারিতে কীবোর্ডের ভিউ সন্ধান এবং সম্পন্ন বোতামটি যুক্ত করা সম্পর্কিত সমস্ত বাস্তবায়ন (এ কারণেই বাটন.ই = 163 বি / সি কীবোর্ডের উচ্চতা 216) ভঙ্গুর কারণ আইওএস ভিউয়ের স্তরক্রম পরিবর্তন করে। উদাহরণস্বরূপ উপরের কোডগুলির কোনওটিও iOS9 এর জন্য কাজ করে না।

আমি মনে করি [[[ইউআইএএপ্লিকেশন শেয়ারড অ্যাপ্লিকেশন] উইন্ডোজ] লাস্টঅবজেক্ট] দ্বারা সর্বাধিকতম সন্ধানটি পাওয়া আরও নিরাপদ এবং এটির নীচে বাম কোণে বোতাম যুক্ত করুন, সম্পন্ন বাটন.ফ্রেম = সিজিআরেক্টমেক (0, SCREEN_HEIGHT-53, 106 , 53); // প্রতিকৃতি মোড


0

সুইফট ২.২ / আমি ডেক্স_এর উত্তর ব্যবহার করেছি। তবে আমি সমস্ত কীবোর্ডে এই কার্যকারিতাটি চেয়েছিলাম। সুতরাং আমার বেস শ্রেণিতে আমি কোডটি রেখেছি:

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

তারপরে সমস্ত কীবোর্ডগুলিতে ডোন বোতামটি যুক্ত করতে কেবলমাত্রডিঅলডে (অথবা একটি টেবিল ভিউ ব্যবহার করে উইলডিসপ্লে সেল) অ্যাডডোনবটনফোর্ডটেক্সটফিল্ডগুলি কল করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.