Как передать данные из DetailView в TableView?
Я новичок в этом. У меня есть приложение с табличным представлением, где, когда я нажимаю на ячейку, оно ведет меня к DetailView. Теперь проблема в том, что у меня есть textField в Detailview, и я хочу загрузить данные, которые пользователь ввел обратно в сегмент detailTextLabel исходной ячейки после того, как я нажму кнопку сохранения.
Как мне это сделать? Ниже то, что у меня есть:
DetailViewController.m
//save button
-(IBAction) SendTextFieldtoViewController:(id)sender {
NSString *grabKeyedData = self.inputField.text;
ViewController *mainController =[self.storyboard instantiateViewControllerWithIndentfier:@"mainController"];
[mainController GrabbedKeyData: grabKeyedData];
}
ViewController.m
-(void) GrabbedKeyData:(NSString *)text{
grabData = text;
NSLog(@" data: %@",text);
[tableView reloadData];
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
.....
if(grabData == nil){
[[cell detailTextLabel] setText:@"no data"];
}else{
[[cell detailTextLabel] setText:grabData];
}
Мне удалось передать данные -(void) GrabbedKeyData, и я могу прочитать переданные данные из NSLog. Но таблица не обновляется, когда я возвращаюсь назад к ViewController.
2 ответа
Я думаю, что проблема может быть одной из двух вещей. В своем вопросе вы говорите "вернуться назад к ViewController", но вы не возвращаетесь к тому, с чего начали, а создаете новый. Если вы попали в детальный контроллер, нажав на ViewController в раскадровке, то это не способ сделать это. Вам необходимо получить ссылку на исходный экземпляр ViewController или использовать протокол (который Apple рекомендует использовать для отправки данных обратно в контроллер). Есть несколько способов получить эту ссылку, вы можете иметь свойство в подробном контроллере, скажем, mainController, скажем, и ViewController может установить себя в качестве значения этого свойства, когда он толкает подробный контроллер.
Другая возможная проблема - простая: в таблице используется обычная ячейка, а не та, в которой есть detailTextLabel. Убедитесь, что вы установили правильный тип ячейки в IB.
-(IBAction) SendTextFieldtoViewController:(id)sender
{
NSString *grabKeyedData = self.inputField.text;
[mainController GrabbedKeyData: grabKeyedData];
ViewController *mainController =[self.storyboard instantiateViewControllerWithIndentfier:@"mainController"];
}
-(void) GrabbedKeyData:(NSString *)text
{
self.keyDataArray = [[NSMutableArray alloc] initWithObjects:text, nil];
NSLog(@" data: %@",text);
[tableView reloadData];
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
.....
NSString *grabbedName = [keyDataArray objectAtIndex:0];
NSLog(@" cell text is :%@",grabbedName);
[[cell detailTextLabel] setText:grabbedName];
}
Вы сохраняете только объект NSString в файле array.so, он хранится в массиве с нулевым индексом.