好的,我会尽力解释这个问题。我有一个iPhone应用程序,它有一个文本字段,用户只能输入数字。那不是问题。但是,小键盘上没有完成按钮,所以我不能让它消失。我可以制作一个用户按下以取消键盘的按钮,但我宁愿有一个完成按钮,因为屏幕按“原样”处于忙碌状态。
嗯,经过一些研究,我遇到了this。哇,这很棒。但是,我还有另一个需要默认键盘的文本字段。无论何时键盘出现,无论何种类型,它都有“完成”按钮。
不好。
所以我做了一些挖掘。仔细阅读评论,人们提到了一种使用“编辑开始”特征去掉“完成”按钮的方法,只在必要时调用“完成按钮”代码。我也完成了这个。如果键入数字字段,然后关闭键盘,然后键入普通字段,则不会显示完成按钮。
然而,有一个错误,仍然出现“完成”按钮。如果你点击数字字段,然后点击普通字段,键盘永远不会“消失”,所以即使它从小键盘变为普通键盘,按钮仍然在那里。我想从视图中删除buttom,但我不知道该怎么做。这是我的代码...
//Done button for numpad
- (void)keyboardWillShow:(NSNotification *)note {
if (showDoneButton == YES)
{
// create custom button
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
doneButton.frame = CGRectMake(0, 163, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3"]) {
[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 view found; add the custom button to it
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
[keyboard addSubview:doneButton];
}
showDoneButton = NO; //This tells done button code to run or not
}
}
- (void)doneButton:(id)sender {
NSLog(@"Input: %@", playerOneLifeLabel.text);
NSLog(@"Input: %@", playerTwoLifeLabel.text);
[playerOneLifeLabel resignFirstResponder];
[playerTwoLifeLabel resignFirstResponder];
}
当NumPadfield触发“编辑确实开始”时,它会调用此函数:
- (IBAction)needNumberPad:(id)sender{
showDoneButton = YES;
}
然后确保显示完成按钮。完成完成按钮代码后,变量(如上所示)将设置回NO,因此如果您点击默认文本字段,它将不再显示。布尔变量默认设置为NO。
需要发生的是,如果您立即从编辑numPad字段跳转到默认字段,则完成按钮会消失。我可以将代码放在“编辑完成”时调用的函数中,但我不知道放在那里的内容。帮助将不胜感激,我已经走到了这一步!
谢谢!
答案 0 :(得分:1)
请按照以下步骤操作
一个。首先使doneButton成为类的实例变量,这将帮助您维护对按钮的引用
湾在keyboardWillShow:(NSNotification *)note
方法
if(!showDoneButton ){
if(doneButton){
[doneButton removeFromSuperview];
doneButton = nil;
}
return;
}
℃。添加keyBoardWillHide的通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
d。在keyBoardWillHide方法中执行以下操作
- (void)keyboardWillHide:(NSNotification *)note
{
if(doneButton)
{
[doneButton removeFromSuperview];
doneButton = nil;
}
}
这应该可以解决问题。
答案 1 :(得分:0)
您可以使用以下方法:
//This delegate notify when the user done from the textfield
- (void) textFieldDidEndEditing:(UITextField *)textField{
[yourTextField resignFirstResponder];
[doneButton removeFromSuperview];
doneButton = nil;
}
yourTextField
表示在键盘上包含完成按钮的文本字段。
上一个方法将从下一个键盘中删除doneButton
。