在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太晚,以便在点击完成按钮时抓取文本。
如何解决这个问题?
答案 0 :(得分:2)
在处理“完成”按钮的方法中,调用[self.view endEditing:YES]
作为方法的第一行。这将导致键盘被解除,允许您在屏幕解除之前处理数据。
-(IBAction)doneButtonPressed:(id)sender {
[self.view endEditing:YES];
[self.navigationController popViewControllerAnimated:YES];
}