can*_*boy 7 iphone validation objective-c uibutton uitextfield
我在视图中有几个uitextfields,我想禁用uibutton,直到所有字段都输入了一些内容.这样做的最佳方法是什么?理想情况下,我也想做一些基本的验证(确保所有条目都是数字).
编辑
无法让下面的解决方案完全奏效.下面是我工作的版本(由Brad,Mike和其他各种来源拼凑而成)
使用UITextFieldDelegate
在IB中创建文本字段,并附加到相关的IBOutlets - textField1,textField2等
在IB中创建并将按钮连接到其相关的IBOutlet(submitButton)和IBAction(submitAction).在IB中取消选中已启用.
在视图控制器中创建验证方法:
-(IBAction)validateTextFields:(id)sender
{
// make sure all fields are have something in them
if ((textField1.text.length > 0) && (textField2.text.length > 0) && (textField3.text.length > 0)) {
self.submitButton.enabled = YES;
}
else {
self.submitButton.enabled = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
将每个字段的"编辑已更改"事件连接到validateTextFields方法.(注意:'Value Changed'事件似乎不起作用)
使用此委托方法来限制字符(在我的情况下为数字,最多为一个句点).这一点来自Erica Sadun顺便说一句.
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *cs;
NSString *filtered;
// Check for period
if ([textField.text rangeOfString:@"."].location == NSNotFound)
{
cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
// Period is in use
cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
Run Code Online (Sandbox Code Playgroud)
瞧.
您将需要在管理视图的视图cOntroller中的所有文本字段上实现UITextFieldDelegate委托,确保在加载视图后验证文本字段:
-(void) viewDidLoad {
textField1.delegate = self; //Note if these were created in a xib, you can do this in IB
textField2.delegate = self;
[self validateTextFields];
}
Run Code Online (Sandbox Code Playgroud)
并实现textField:shouldChangeCharatersInRage:方法,以便每次textfileds更改时进行验证:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
[self validateTextFields];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
最后,根据需要进行实际验证并启用或禁用按钮:
-(void) validateTextFields {
if ((textField1.text.length > 0) && textField2.text.length > 0)) {
myUIButton.enabled = YES;
}
else {
myUIButton.enabled = NO;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6005 次 |
| 最近记录: |