我正在编写一个带有textField的iPhone应用程序,供用户输入“美元金额”,如12.34
没有任何SDK键盘似乎有小数点。 (或者是吗?)所以我决定让用户键入“1234”,我会为他添加小数点...当他键入....使用编辑更改。
但每次我的代码添加小数点......它会生成另一个“编辑已更改”事件......并导致无限循环。
或者有更简单的方法来完成上述所有操作吗?
答案 0 :(得分:7)
我认为最好指出,从新SDK开始,您可以使用新的UIKeyboardTypeDecimalPad
。
所以现在你必须:
myTextField.keyboardType=UIKeyboardTypeDecimalPad;
答案 1 :(得分:3)
请将您的请求发布为iPhone Developer Portal中的错误。苹果不会添加一个新的键盘类型,只是带有小数分隔符的数字,直到他们听到大量开发人员需要一个...
-t
答案 2 :(得分:1)
您可以将自定义按钮添加到现有键盘。我这样做是为了在数字键盘上添加一个“完成”按钮。为什么不添加其他人?您可以将删除键减半,并为小数点添加半角键。无论如何,这是代码:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
if ( MAKE SURE THIS IS BEING CALLED BY THE CORRECT TEXT FIELD ) {
// 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];
}
}
else
[doneButton removeFromSuperview];
}
您需要从图像创建UIButton,使其看起来像一个键。使用上述功能可以在调用时将其添加到键盘。实际上效果很好。
答案 3 :(得分:0)
您可以在委托UITextField
期间更改textField:shouldChangeCharactersInRange:replacementString:
的文本 - 只需从此方法返回NO,但更改文本(添加小数点),如下所示:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];
// add decimal point to newText
textField.text = newText;
return NO;
}
或者,在值更改处理程序中使用静态BOOL来表示您正在自行更改值,例如:
-valueDidChange:(id)notify {
static BOOL ownChange = NO;
if (ownChange) return;
ownChange = YES;
textField.text = "12.23";
ownChange = NO;
}
但这并不漂亮:)
答案 4 :(得分:0)
它不是完美的,因为它位于键盘的顶部,但您可以在inputAccessoryView中添加一个按钮(记录和合法)。我在xib文件中定义了一个工具栏(不在我的主视图中),触摸屏映射到一个方法,该方法将小数添加到字段中。我在doLoad中分配它:
descriptionTextArea.inputAccessoryView = editorControlView;
答案 5 :(得分:-1)