我在分组的UITableView中有3个UITextFields,并且我试图找出正确的逻辑,只有当UITextFields都没有空时才启用我的'Save'UIBarButtonItem。
我目前正在使用- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
UITextField委托方法逐个字符地检测字段的更改,但它提供的结果不一致。
有什么想法吗?
编辑:这是我现在使用的代码。正如您所看到的,我已将文本字段放入数组中,因此我可以遍历它们。就像现在一样,在我输入第3个字段中的第2个字符之前,保存按钮不会启用。此外,它还将启用/禁用作为从字段逐个删除字符的替代。
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
BOOL allValid;
if (newString.length)
{
// Cycle through array checking for completeness
for (int i = 0; i < [textFieldArray count]; i++)
{
if ([[[textFieldArray objectAtIndex:i] text] length] > 0)
{
allValid = YES;
NSLog(@"TextField #%i Validates.", i);
}
else
{
allValid = NO;
NSLog(@"TextField #%i Does Not Validate.", i);
}
}
}
else
{
NSLog(@"Invalid");
allValid = NO;
}
if (allValid)
[saveButton setEnabled:YES];
else
[saveButton setEnabled:NO];
return YES;
答案 0 :(得分:0)
你究竟是如何使用这种方法的?我就是这样做的:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (newString.length) {
//If all the others are also non-empty, enable your button
}
return YES;
}
但是,在用户按下回车键后启用按钮可能更有意义,这更容易处理。只需在文本字段上使用didEndEditingOnExit或didEndEditing事件,然后检查它们是否为非空。
答案 1 :(得分:0)
好的,我最终是这样做的。
我创建了- (IBAction)validateFields:(id)sender
并将其连接到UITextField上的Editing Changed outlet。它看起来像这样。
- (IBAction)validateFields:(id)sender
{
BOOL valid = YES;
// On every press we're going to run through all the fields and get their length values. If any of them equal nil we will set our bool to NO.
for (int i = 0; i < [textFieldArray count]; i++)
{
if (![[[textFieldArray objectAtIndex:i] text] length])
valid = NO;
}
[saveButton setEnabled:valid];
}
我已经给它一个相当不错的去,并且无法获得保存按钮以启用任何空文本字段的组合,因此我将说这是要走的路。