1

В моем приложении у меня есть один UITableViewController (Uctovatrida0TableViewController) и два других UIViewContoller (DetailViewController и примеры).Прохождение indexPath из UITableView

Теперь у меня есть проблема, потому что я не знаю, как идентифицировать индекс (от indexPath.row) в моем первом UIViewController, чтобы потом правильно ссылаться на другой UIViewController.

код в моем Uctovatrida0TableViewController.m (работает хорошо):

-(void) showDetailsForIndexPath:(NSIndexPath*)indexPath 
{ 
    [self.searchBar resignFirstResponder]; 
    DetailViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailsViewController"]; 
    Ucty* ucet; 

    if(isFiltered) 
    { 
     ucet = [_filteredTableData objectAtIndex:indexPath.row]; 
    } 
    else 
    { 
     ucet = [self.alldataArray objectAtIndex:indexPath.row]; 
    } 
    vc.uctyItem = ucet; 
    [self.navigationController pushViewController:vc animated:true]; 
} 

код в моем классе DetailViewConroller, где мне нужно indexPath от Uctovatrida0TableViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"Priklad"]) 
    { 
     Priklad *vc = [segue destinationViewController]; 
     Ucty* ucet; 

     //of course this does not work 
     ucet = [self.alldataArray objectAtIndex:NSIndexPath.row]; 

     vc.uctyItem = ucet; 
     [self.navigationController pushViewController:vc animated:true]; 
    } 
} 

Код в мой класс Priklad.m:

- (void)setDetailItem:(id)newDetailItem 
{ 
    if (self.uctyItem != newDetailItem) 
    { 
     self.uctyItem = newDetailItem; 
     [self configureView]; 

    } 
} 
- (void)configureView 
{ 
    if (self.uctyItem) { 
     self.prikladLabel.text = self.uctyItem.priklad; 
     self.uctykprikladu.text = self.uctyItem.uctykprikladu; 
    } 
} 

ответ

2

Из кода, кажется DetailViewConroller имеет свойство uctyItem. Поэтому в вашем методе DetaiViewControllerprepareForSegue:sender: вы можете просто позвонить vc.uctyItem = self.uctyItem;.

+0

Спасибо, но почему выход в классе Priklad нуля? – Alien

+1

Если вы сделаете так, как я предложил выше, вы вызываете 'setUctyItem:' not 'setDetailItem:', поэтому 'configureView' не вызывается. – johnpatrickmorgan

+0

Конечно, моя ошибка. Я попытался использовать его таким образом, но результат все еще (null): - (void) setUctyItem: (Ucty *) uctyItem {if (self.uctyItem! = UctyItem) {self.uctyItem = uctyItem; [self configureView];}} – Alien

1

Добавить объект до DetailViewConroller, который вы можете установить перед тем, как нажать на него.

@property (assign, nonatomic) int index;

1

Если вы хотите, чтобы получить выбранную ячейку indexPath, то есть способ, который: selectedIndexPath = [tableView indexPathForSelectedRow];

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