Обновление по умолчанию detailViewController - PullRequest
0 голосов
/ 25 декабря 2010

Я создал приложение, которое позволяет пользователям добавлять информацию (из addViewController), которая затем отображается в UITableView на rootViewController. Когда пользователь нажимает на tableViewCell, затем отображается detailViewController, как вы уже догадались, более подробная информация о введенной информации пользователя. То, что я пытаюсь сделать, это настроить editViewController, который позволит пользователям редактировать информацию, которую они уже представили.

В настоящее время я пытаюсь автоматически заполнить editViewController информацией, которая была ранее предоставлена ​​пользователем (после чего они могут нажать сохранить и обновить информацию). Тем не менее, я застреваю, пытаясь выполнить это автоматическое заполнение, и я не уверен, что это даже лучший путь для достижения этой цели.

Вот метод редактирования, который вызывается для загрузки editViewController из detailViewController.

-(IBAction)editDetails:(id)sender {

 editViewController *evc = [[editViewController alloc] initWithNibName:@"editViewController" bundle:nil];
 rootViewController *rvc = [[rootViewController alloc] init];

 UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:evc];

    [[self navigationController] presentModalViewController:navigationController animated:YES];
 ///For Style
 NSInteger styleCount = [[rvc scoreTypeArray] count];

 NSInteger styleRows = [rvc.scoreTypeArray objectAtIndex:indexPath.row]; ///HERE I GET AN ERROR MESSAGE SAYING THAT indexPath IS NOT DEFINED

 ///For Date
 NSInteger count = [[rvc dateArray] count];
 NSInteger rows = [[rvc indexPath] row]; ///AND HERE I GET A WARNING MESSAGE SAYING rootViewController MAY NOT RESPOND TO INDEX PATH, AND OF COURSE IT DOESN'T WORK

 [[evc dateField] setText:[NSString stringWithFormat:@"%@", [[evc dateArray] objectAtIndex:(count-1-rows)]]];


 [[evc styleField] setText:[NSString stringWithFormat:@"%@", [[rvc scoresArray] objectAtIndex:(styleCount-1-styleRows)]]];

    [navigationController release];

 [evc release];
 [rvc release];}

Итак, я пытаюсь загрузить информацию из сохраненного массива, который объявлен в моем rootViewController.

Есть мысли о теле?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2010

хорошо ...

NSInteger styleRows = [rvc.scoreTypeArray objectAtIndex:indexPath.row];

Это неправильно, потому что вы пытаетесь получить доступ к indexPath.row, который не определен в этом методе.IndexPath.row обычно используется в методах tableView, таких как

(tableView*)didSelectRowAt:(NSIndexPath*)indexPath

. Поэтому вам нужно будет передать значение indexPath.row из метода делегата tableView в качестве параметра в методе editDetails.

, но вына самом деле это не нужно ... вместо этого сделайте это:

в detailViewController и editViewController, создайте NSString *dateObject и сделайте его из @property(nonatomic,assign). Теперь в корневом контроллере представления didSelectRowAtIndexPath, когда пользовательнажимает на строку

 [dvc setDateObject:self.dateArray objectAtindex:indexPath.row];

, поэтому теперь detailViewController содержит ссылку на исходную дату в объекте dateObject.любое внесенное здесь изменение также изменит дату в массиве date rootController.

Поэтому, когда пользователь нажимает кнопку редактирования, вызовите

-(IBAction)editDetails:(id)sender {

    editViewController *evc = [[editViewController alloc] initWithNibName:@"editViewController" bundle:nil];

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:evc];
    [evc setDateObject:self.dateObject];
    [[self navigationController] presentModalViewController:navigationController animated:YES];

    [navigationController release];
    [evc release];

}

Теперь вы снова передали оригиналdateObject для editViewController.в его viewDidLoad установите textField, и когда пользователь редактирует и нажимает «Готово», замените dateObject в editViewController на измененный dateObject.Помните, что это оригинальный dateObject, который был передан в качестве ссылки от rootViewController.поэтому вы также заменили его в dateArray rootViewController.теперь вам просто нужно знать, когда вы возвращаетесь из detailViewController в rootViewController и выполняете [table reloadData];

tadan !!!

0 голосов
/ 25 декабря 2010

Создайте свойства в представлении редактирования с сохранением, а затем просто измените значение.Оставьте только дать вам и ссылку на исходный объект.SetText в текстовом поле просто сделать новую копию вашей строки.Если вы хотите сделать это, вы можете создать протокол делегата в вашем представлении «Правка» и установить текущий контроллер навигации, который представляет ваш вид редактирования, как делегат вашего вида редактирования.И в вашем редакторе, когда он исчезнет, ​​вызовите метод делегата.

Делегат doc здесь

Объявленное свойство doc здесь

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...