Search code examples
objective-cuitableviewuiviewcontrolleruistoryboardseguensindexpath

Passing indexPath from UITableView


In my application I have oneUITableViewController (Uctovatrida0TableViewController) and two otherUIViewContoller (DetailViewController and examples).

Now I have a problem because I do not know how to identify index (from indexPath.row) in my firstUIViewController to then correctly referred to another UIViewController.

The code in my Uctovatrida0TableViewController.m (works well):

-(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];
}

Code in my class DetailViewConroller where I need indexPath from 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];
    }
}

Code in my class 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;
    }
}

Solution

  • From your code, it seems DetailViewConroller has a property uctyItem. So in your DetaiViewController's prepareForSegue:sender: method, you can just call vc.uctyItem = self.uctyItem;.