iOS8数字键盘左下角添加完成按钮的核心代码如下:
- (void)addDoneButtonToNumPadKeyboard { UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; if (systemVersion < 8.0){ doneButton.frame = CGRectMake(0, 163, 106, 53); }else{ doneButton.frame = CGRectMake(0, SCREEN_SIZE.height-53, 106, 53); } doneButton.tag = NUM_PAD_DONE_BUTTON_TAG; doneButton.adjustsImageWhenHighlighted = NO; [doneButton setTitle:@"完成" forState:UIControlStateNormal]; [doneButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside]; NSArray *windowArr = [[UIApplication sharedApplication] windows]; if (windowArr != nil && windowArr.count > 1){ UIWindow *needWindow = [windowArr objectAtIndex:1]; UIView *keyboard; for(int i = 0; i < [needWindow.subviews count]; i++) { keyboard = [needWindow.subviews objectAtIndex:i]; if(([[keyboard description] hasPrefix:@"<UIPeripheralHostView"] == YES) || ([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) || ([[keyboard description] hasPrefix:@"<UIInputSetContainerView"] == YES)){ if ([[keyboard subviews] count] <= 1){ [keyboard addSubview:doneButton]; } } } } } -(void)removeDoneButtonFromNumPadKeyboard { UIView *doneButton = nil; NSArray *windowArr = [[UIApplication sharedApplication] windows]; if (windowArr != nil && windowArr.count > 1){ UIWindow *needWindow = [windowArr objectAtIndex:1]; UIView *keyboard; for(int i = 0; i < [needWindow.subviews count]; i++) { keyboard = [needWindow.subviews objectAtIndex:i]; if(([[keyboard description] hasPrefix:@"<UIPeripheralHostView"] == YES) || ([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) || ([[keyboard description] hasPrefix:@"<UIInputSetContainerView"] == YES)){ doneButton = [keyboard viewWithTag:NUM_PAD_DONE_BUTTON_TAG]; if (doneButton != nil){ [doneButton removeFromSuperview]; } } } } }
注:
1.iOS8之后,键盘view的description变为以<UIInputSetContainerView开头,所以需要在判断的逻辑中加上这一项。
2.iOS8之后,键盘view的大小变成了整个屏幕的大小,所以需要对按钮添加的位置进行适配。
原文地址:http://blog.csdn.net/mmoaay/article/details/39368081