2012-07-24 42 views
0

我正在使用this stackoverflow posting中描述的方法从文本字段中检索值。我的问题是,桌面视图模式地呈现,我有一个save按钮,验证输入并将其存储。UITableViewCell中的UITextField和模态视图中的验证

的问题是,该方法textFieldDidEndEditing当用户点击一个UIBarButtonItem(=保存按钮,其封闭模态的视图)不调用。

在这个事件中(当用户想要保存输入时),我想验证它。但是这些值存储在textFieldDidEndEditing的属性中。由于未调用此方法,我无法正确验证输入值。

有没有人有这方面的提示或解决方案?

在此先感谢!

回答

0

好了,我们开始吧:

由于@Lefteris,他与存储当前指数的想法。由于我无法将索引存储到tag属性中,因此我决定存储活动的indexPath和另外的活动textField。 (我知道,到UITextField参考就足够了,但我需要它的其他的东西)

首先我加入了这两个属性:

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

然后我实现textFieldDidBeginEditing:UITextFieldDelegatetextFieldDidEndEditing:

- (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 assumeInput:input withIndexPath:self.activeIndexPath];存储的值到我的性能(如self.firstNameself.lastName,等等...)。

在我的saveAction - 方法我存储当前活动的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的投入。

Best, Chris

2

您应该为您的文本字段分配唯一的标签号码,然后跟踪哪些当前活动(即使用int iVar存储活动文本字段标签值)textFieldDidBeginEditing委托,并且当用户单击保存时,你应该通过它的标签值得到最后的文本字段,然后它是文本值,以便你可以验证它。

+0

我不能使用'tag'属性。我目前正在使用它从单元格中检索文本字段('[cell viewForTag:...]')。任何其他建议? – Chris 2012-07-25 07:32:52

+0

感谢您的输入。存储索引的好主意,但我已经改进了一点点。 – Chris 2012-07-25 09:53:07

+0

我看不出有什么理由不能通过标签访问textview,即使它位于单元格中。只需使用唯一的标签号码,并且一旦获得对单元格的引用,请执行UITextView * myTextView =(UITextView *)[单元格。contentView viewWithTag:XXX]; – Lefteris 2012-07-25 14:16:06