我正在编写一个 iPhone 应用程序,它有一个 textField 供用户输入“美元金额”,如 12.34
SDK 键盘似乎都没有小数点。(或者是吗?)所以我决定让用户输入“1234”,然后我会在他输入时为他添加小数点......通过使用 EDITING CHANGED。
但是每次我的代码添加小数点时......它都会生成另一个“EDITING CHANGED”事件......并导致无限循环。
还是有更简单的方法来完成上述所有操作?
我认为最好指出从新 SDK 开始,您可以使用新的UIKeyboardTypeDecimalPad
.
所以现在你只需要:
myTextField.keyboardType=UIKeyboardTypeDecimalPad;
请将您的请求作为错误发布在 iPhone 开发者门户中。Apple 不会添加一种新的键盘类型,它只是带有小数点分隔符的数字,直到他们收到大量需要的开发人员的...
-t
您可以将自定义按钮添加到现有键盘。我这样做是为了在数字键盘上添加一个“完成”按钮。为什么不添加其他人?您可以将删除键切成两半,并为小数点添加一半大小的键。无论如何,这是代码:
- (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,使其看起来像一个键。每当它被调用时,使用上述功能将其添加到键盘。实际上效果很好。
您可以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;
}
不过,这并不漂亮:)
它并不完美,因为它位于键盘顶部,但您可以在 inputAccessoryView 中添加一个按钮(记录在案且合法)。我在 xib 文件(不在我的主视图中)中定义了一个工具栏,其修饰映射到将小数添加到字段的方法。我在doLoad中分配它:
descriptionTextArea.inputAccessoryView = editorControlView;