从 UITableView 传递 indexPath

Passing indexPath from UITableView

在我的应用程序中,我有一个UITableViewController(Uctovatrida0TableViewController)和另外两个UIViewContoller(DetailViewController 和示例)。

现在我遇到了一个问题,因为我不知道如何在我的第一个UIViewController中识别索引(从indexPath.row)然后正确地引用另一个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];
}

我的 class DetailViewConroller 中的代码,我需要来自 Uctovatrida0TableViewController.m

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

我的代码 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;
    }
}

添加一个属性到DetailViewConroller,你可以在推送到它之前设置它。

@property (assign, nonatomic) int index;

根据您的代码,DetailViewConroller 似乎有一个 属性 uctyItem。所以在你的 DetaiViewControllerprepareForSegue:sender: 方法中,你可以调用 vc.uctyItem = self.uctyItem;.

如果你想获得选定的单元格 indexPath 那么有一个方法是:selectedIndexPath = [tableView indexPathForSelectedRow];