UIKeyboardTypeNumberPad without a done button

前端 未结 4 1270
执笔经年
执笔经年 2020-12-15 11:09

How can we implement UIKeyboardTypeNumberPad so that it will have a \'done\' button? By default it does not have one.

相关标签:
4条回答
  • 2020-12-15 11:51
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardDidShowNotification object:nil];
    
    
    //Call this method 
    
    - (void)keyboardWillShow:(NSNotification *)note {
    
    
       UIButton *doneButton  = [[UIButton alloc] initWithFrame:CGRectMake(0, 163, 106, 53)];
        doneButton.adjustsImageWhenHighlighted = NO;
        [doneButton setImage:[UIImage imageNamed:@"Done.png"] forState:UIControlStateNormal];
       [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
        UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
        UIView* keyboard;
        for(int i=0; i<[tempWindow.subviews count]; i++) {
            keyboard = [tempWindow.subviews objectAtIndex:i];
    
            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];
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-12-15 11:53

    If anybody had a problem that the DONE button keeps popping up when you try to load other types of keyboards in the same app, I know a lot of apps out there have this issue. Anyway, here is how I solved this: In your ViewController ( the same viewcontroller that you added DONE button ) add this code ( as is ) and it should solve your problems with DONE button keep reappearing. Hope it helps to some folks.

    - (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];   
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
    
    } else {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];  
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
    }
    

    }

    0 讨论(0)
  • 2020-12-15 11:55

    If I am not wrong then You want to ask as to how to add a custom "Done" button to keyboard for UIKeyboardTypeNumberPad . In that case this might be helpful. Declare a UIButton *doneButton in.h and add the following code to .m file

    - (void)addButtonToKeyboard {
        // create custom button
        if (doneButton == nil) {
            doneButton  = [[UIButton alloc] initWithFrame:CGRectMake(0, 163, 106, 53)];
        }
        else {
            [doneButton setHidden:NO];
        }
    
        [doneButton addTarget:self action:@selector(doneButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
        // locate keyboard view
        UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
        UIView* keyboard = nil;
        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)doneButtonClicked:(id)Sender {
    //Write your code whatever you want to do on done button tap
    //Removing keyboard or something else
    }
    

    I am using the same in my application and the button's frame are thus adjusted, You can thus call [self addButtonToKeyboard ] whenever you need to show up the done button over the keyboard. UIKeyboardTypeNumberPad has no Done button otherwise.enter image description here

    0 讨论(0)
  • 2020-12-15 12:11

    iOS 5 issue resolved. Thanks a million.

    I had a problem with displaying the Done button.

    Replaced:

     if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
         [keyboard addSubview:doneButton];
    

    which did not display the done button in iOS 5...

    With:

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

    Worked a treat. You're a star. Thanks, Nicola ;-)

    0 讨论(0)
提交回复
热议问题