2014-10-01 4 views
0

У меня есть TableView, где у меня есть строки, название которых содержит имя свойства.didSelectRowAtIndex не обновляется должным образом

Свойства определены в другом TableView, где я могу нажать «Добавить», чтобы добавить вновь созданный объект в первый TableView.

Если я сейчас хочу отредактировать, скажем, второй объект в списке, я должен нажать его (переход на второй TableView), нажмите «Отмена» и нажмите его еще раз, чтобы получить правильное имя.

Что-то с didSelectRowAtIndex, похоже, не работает правильно, но я не могу понять, что это такое.

Вот мой метод:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    self.indexPathInt = (int)indexPath.row; 
} 

и:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:kSegueIdentifier]){ 

     AddEntry *controller = [[[segue destinationViewController] viewControllers] objectAtIndex:0]; 

     controller.delegate = self; 
    } 

    if ([[segue identifier] isEqualToString:kEditSegueIdentifier]) { 

     edited = YES; 

     AddEntry *controller = [[[segue destinationViewController] viewControllers] objectAtIndex:0]; 

     EntryObject *entry = self.entryObjectArray[self.indexPathInt]; 

     controller.name = entry.name; 
     controller.someProperty = entry.soneProperty; 


     controller.delegate = self; 
    } 
} 

Если я вхожу в indexPathInt в методе PrepareforSegue это не то же самое, как indexPath.row в методе DidSelectRowAtIndex, но один я нажал до.

Таким образом, indexPathInt не обновляется во времени.

Есть ли другой способ доступа к выбранной строке любым способом без отправки ее переменной?

+0

Метод 'UITableView'' indexPathForSelectedRow' предоставит вам 'NSIndexPath' для текущей выбранной строки. – bobnoble

ответ

0

Вы, вероятно, называете [self performSegueWithIdentifier ...] перед установкой self.indexPathInt.

Если вы выполняете сеанс через раскадровку, то именно то, что вы объясняете, произойдет. Переключитесь на программный вызов [self performSegueWithIdentifier] ПОСЛЕ того, как вы установите self.indexPathInt

Cheers.

+0

Благодарим вас за ответ, но как установить self.indexPathInt перед вызовом segue? – smnk

0

Если вы перейдете непосредственно из строки вместо этого вручную из viewController, prepareForSegue будет вызван до пути didSelectRowAtIndex.

Edit:

  • Перетащите SEGUE от ViewController к цели, а не от землеотвода.

  • Назовите переход, как вы обычно бы

  • Установить переменную вы хотите установить в didSelectRowAtIndexPath

  • вызовов в didSelectRowAtIndexPath ПОСЛЕ установки переменной:

    [собственного performSegueWithIdentifier: @ "yourSegueIdentifierString" отправитель: self];

+0

Благодарим вас за ответ, но как установить self.indexPathInt перед вызовом segue? – smnk

+0

См. Обновленный ответ выше. –

Смежные вопросы