【问题标题】:removing done button in normal keypad in iphone删除 iphone 普通键盘中的完成按钮
【发布时间】:2012-01-03 10:18:37
【问题描述】:

我有两个编辑文本一个编辑文本输入应该只接受数字,以便我有显示数字键盘。在数字键盘中没有完成按钮。所以现在我添加完成按钮using this link 现在完成按钮工作正常。我的问题是我的另一个编辑文本是普通键盘,键盘也会显示完成按钮。我想避免在那个特定的编辑文本中完成按钮。@987654322 @ 请指导我如何删除普通键盘中的那个按钮..

【问题讨论】:

    标签: iphone objective-c xcode


    【解决方案1】:
    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)addButtonToKeyboard
    {
        // create custom button
    
        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:@"Btn-DoneDown-2.png"] forState:UIControlStateNormal];
            [doneButton setImage:[UIImage imageNamed:@"Btn-DoneUp-2.png"] forState:UIControlStateHighlighted];
        } 
        else
        {        
            [doneButton setImage:[UIImage imageNamed:@"Btn-DoneDown-1.png"] forState:UIControlStateNormal];
            [doneButton setImage:[UIImage imageNamed:@"Btn-DoneUp-1.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)keyboardWillShow:(NSNotification *)note 
    {
        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 3.2) 
        {
            [self addButtonToKeyboard];
        }
    }
    
    - (void)keyboardDidShow:(NSNotification *)note 
    {
        if(doneButton)
        {
            [doneButton removeFromSuperview];
            doneButton = nil;
        }
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) 
        {
            [self addButtonToKeyboard];
        }
    }
    
    - (void)doneButton:(id)sender 
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
        [doneButton removeFromSuperview];
        doneButton = nil;
    }
    

    【讨论】:

    • 最后只有我在搜索 [[NSNotificationCenter defaultCenter] removeObserver:self];非常感谢prem
    【解决方案2】:

    您可以使用以下代码将其删除:

    注意:您必须将tag 分配给按钮。这里是300

    //for remove done button from keyboard
    - (void)removeButtonFromKeyboard
    {  
            // 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, remove the button
                if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) 
                {
                    [[keyboard viewWithTag:300] removeFromSuperview];
                }
                else
                {
                    if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
                        [[keyboard viewWithTag:300] removeFromSuperview];
                }       
            }
            isButtonAdded = NO ;
        }
    

    编辑

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 中,您可以通过文本字段的标签检查您是否想要完成按钮。喜欢:

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
       if (textField.tag == 1001)
       {
           // add button
           // take a Boolean and make it true in your create button function  
           if(!doneButtonAdded)// if button is not added
          {
             // then add button
          }
       }
       else if (textFiled.tag == 1002) // your normal key board
       {
          if(doneButtonAdded)// if button is added
          {
              // remove button
              // in remove button function make doneButtonAdded to false
          }
       }
    }  
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 2010-12-30
      • 2017-06-24
      • 2021-07-14
      • 2011-05-20
      • 1970-01-01
      • 2012-10-09
      • 2015-04-06
      • 1970-01-01
      相关资源
      最近更新 更多