我已经阅读过有关此问题,但无法找到解决方案。
我根本不会在我的号码簿上添加一个完成按钮
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow:)
name:UIKeyboardWillShowNotification
object:nil];
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)addButtonToKeyboard {
NSLog(@"call");
// create custom button
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
doneButton.frame = CGRectMake(0, 163, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
[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;
NSLog(@"%d", [tempWindow.subviews count]);
for(int i=0; i<[tempWindow.subviews count]; i++) {
NSLog(@"found");
keyboard = [tempWindow.subviews objectAtIndex:i];
[keyboard addSubview:doneButton];
}
}
- (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];
}
}
此代码:
NSLog(@&#34;%d&#34;,[tempWindow.subviews count]);
始终为0,所以它根本不添加按钮......任何想法?
答案 0 :(得分:0)
有一个很棒的教程可以完全满足您的需求 所以访问: http://www.neoos.ch/blog/37-uikeyboardtypenumberpad-and-the-missing-return-key
尝试添加
if([[keyboard description] hasPrefix:@"UIKeyboard"] == YES)
[keyboard addSubview:doneButton];
中的
for(int i=0; i<[tempWindow.subviews count]; i++) {
NSLog(@"found");
keyboard = [tempWindow.subviews objectAtIndex:i];
[keyboard addSubview:doneButton];
}
所以这应该是你的结果:
for(int i=0; i<[tempWindow.subviews count]; i++) {
NSLog(@"found");
keyboard = [tempWindow.subviews objectAtIndex:i];
if([[keyboard description] hasPrefix:@"UIKeyboard"] == YES)
[keyboard addSubview:doneButton];
}
或者你可以使用你在本文中找到的扩展程序 https://stackoverflow.com/a/4355795/1578508
答案 1 :(得分:0)
这是我的工作代码,它已经仅用于真正的iPhone ,我从未在模拟器上测试过,我希望它对你有帮助。
- (void)keyboardWillShow:(NSNotification *)notification {
UIWindow *_keyboardWindow = nil;
for (UIWindow *_testWindow in [[UIApplication sharedApplication] windows]) {
if (![[_testWindow class] isEqual:[UIWindow class]]) {
_keyboardWindow = _testWindow;
break;
}
}
UIView *_foundKeyboard = nil;
for (UIView *_possibleKeyboard in [_keyboardWindow subviews]) {
if ([[_possibleKeyboard description] hasPrefix:@"<UIPeripheralHostView"]) {
if ([[[[_possibleKeyboard subviews] objectAtIndex:0] description] hasPrefix:@"<UIKeyboard"]) {
_foundKeyboard = _possibleKeyboard;
break;
}
} else if ([[_possibleKeyboard description] hasPrefix:@"<UIKeyboard"]) {
_foundKeyboard = _possibleKeyboard;
break;
}
}
if (_foundKeyboard) {
if (_doneButton == nil) {
_doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
_doneButton.frame = CGRectMake(0, 163, 106, 53);
_doneButton.adjustsImageWhenHighlighted = false;
[_doneButton.titleLabel setFont:[UIFont boldSystemFontOfSize:19.f]];
[_doneButton setTitle:@"DONE" forState:UIControlStateNormal];
[_doneButton setTitleColor:[UIColor colorWithRed:77.f/256.f green:84.f/256.f blue:98.f/256.f alpha:1.f] forState:UIControlStateNormal];
[_doneButton setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal];
[_doneButton.titleLabel setShadowOffset:CGSizeMake(1.f, 1.f)];
[_doneButton setTitle:@"DONE" forState:UIControlStateHighlighted];
[_doneButton addTarget:self action:@selector(buttonKeyBoardDoneTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside];
}
if (_doneButton.superview == nil) {
[_foundKeyboard addSubview:_doneButton];
}
}
}
答案 2 :(得分:0)
真正的解决方案是使用所有按钮(12)创建视图。然后从屏幕上将其动画显示为视图。使用以前的海报方法,对iOS的任何更新都可能会破坏功能,如果您有任何严肃的应用程序,则不要这样做。您的客户可能会疯狂,您的应用程序可以替代安装。
这方面的缺点是你需要绘制一些不错的图形,但保证工作直到Apple有正式的方式让这种情况发生。