0

我正在使用此 stackoverflow 帖子中描述的方法从文本字段中检索值。我的问题是表格视图以模态方式呈现,并且我有一个save按钮可以验证输入并存储它。

问题是当用户单击一个(= 保存按钮,它关闭模式视图)时没有textFieldDidEndEditing调用该方法。UIBarButtonItem

在这种情况下(当用户想要保存输入时)我想验证它。但是这些值存储在textFieldDidEndEditing. 由于未调用此方法,因此我无法正确验证输入值。

有人对此有提示或解决方案吗?

提前致谢!

4

2 回答 2

2

您应该为您的文本字段分配唯一的标签编号,然后在委托中跟踪当前处于活动状态(即使用 int iVar 存储活动文本字段标签值),textFieldDidBeginEditing当用户单击保存时,您应该得到最后一个文本字段的标签值,然后是文本值,因此您可以对其进行验证。

于 2012-07-24T14:14:41.880 回答
0

好的,我们开始:

感谢@Lefteris 和他存储当前索引的想法。由于我无法将索引存储到tag属性中,我决定存储 activeindexPath和另外的 active textField。(我知道,参考UITextField就足够了,但我需要它来做其他事情)

首先,我添加了这两个属性:

@property (nonatomic, strong) NSIndexPath *activeIndexPath;
@property (nonatomic, strong) UITextField *activeTextField;

然后我实现了textFieldDidBeginEditing:and textFieldDidEndEditing:of UITextFieldDelegate.

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSIndexPath *indexPath = (NSIndexPath*)[self.tableView indexPathForCell:(UITableViewCell*)[[textField superview] superview]];

    self.activeTextField = textField;
    self.activeIndexPath = indexPath;
}

- (void)textFieldDidEndEditing:(UITextField *)textField 
{
    NSString *input = textField.text;    

    //assuming values from input textfield into corresponding properties
    [self assumeInput:input withIndexPath:self.activeIndexPath];

    self.activeTextField = nil;
    self.activeTextField = nil;
}

textFieldDidEndEditing:我通过使用方法将值存储到我的属性中(例如self.firstNameself.lastName等...)[self assumeInput:input withIndexPath:self.activeIndexPath];

在我的saveAction-Method 中,我存储了当前活动的值TextField

- (IBAction)saveButtonClicked:(UIBarButtonItem *)sender 
{    
    //assuming input from active field (didEndEditing _not_ called right now!)
    [self assumeInput:self.activeTextField.text withIndexPath:self.activeIndexPath];

    //test output
    NSLog(@"firstName: %@", self.firstName);
    NSLog(@"lastName: %@", self.lastName);
    NSLog(@"email: %@", self.email);
    ...
}

……就是这样!

希望能帮助到你!感谢@Lefteris 的意见。

最好的,克里斯

于 2012-07-25T10:00:27.880 回答