UITableViewCells使用textViewDidEndEditing将数据写入plist

时间:2012-10-29 16:20:41

标签: iphone objective-c ios xcode

在Cell.m中,我编写了这段代码,将一些字符串添加到字典中:

- (void)textViewDidEndEditing:(UITextView *)textView {

if (cellIndex == 0) {
[[dataSource objectAtIndex:dataIndex] setObject:self.cellTextView.text forKey:@"Usersmell"];
}
if (cellIndex == 1) {
    [[dataSource objectAtIndex:dataIndex] setObject:self.cellTextView.text forKey:@"Usertaste"];
}
if (cellIndex == 2) {
    [[dataSource objectAtIndex:dataIndex] setObject:self.cellTextView.text forKey:@"Usersuits"];
}
if (cellIndex == 3) {
    [[dataSource objectAtIndex:dataIndex] setObject:self.cellTextView.text forKey:@"Usernotes"];
}

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Objects.plist"];

//removed some code here that gets the index of dictionary for replacement, then:

[allObjectsArray replaceObjectAtIndex:index withObject:[NSDictionary dictionaryWithDictionary:[dataSource objectAtIndex:dataIndex]]];
[allObjectsArray writeToFile:path atomically:YES];
}

然后,在TableViewController.m中:

-(IBAction)doneButtonPressed:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}

用户现在返回DetailViewController,其中包含有关对象的信息以及用户添加的新信息。信息是从viewWillAppear中的plist中提取的。

但问题是如果用户在没有首先解除键盘的情况下点击完成按钮(触发textViewDidEndEditing),则最后编辑的单元格中的文本不会显示在DetailViewController中。

但是如果用户又返回一步然后重新输入对象(DetailViewController),那么文本就在那里。因此,对于父视图中的viewWillAppear来说,触发textViewDidEndEditing太晚,以便在点击完成按钮时抓取文本。

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在处理“完成”按钮的方法中,调用[self.view endEditing:YES]作为方法的第一行。这将导致键盘被解除,允许您在屏幕解除之前处理​​数据。

-(IBAction)doneButtonPressed:(id)sender {
    [self.view endEditing:YES];

    [self.navigationController popViewControllerAnimated:YES];
}