4

我正在尝试从一个 TableViewController 中选择一个详细信息披露按钮(或一行)并转到另一个 TableViewController,而不将任何数据从第一个 TableViewController 传递到第二个 TableViewController。因此,第一个 TableViewController 几乎充当了一个表格,它将根据所选的详细信息披露按钮(或行)导航到不同的 TableViewControllers。

到目前为止,我执行此操作的代码如下所示:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {


    NSUInteger rowNumber = [indexPath row];   
    NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber];

    self.categoryData = [self.commuterDict objectForKey:categoryCode];

    [self performSegueWithIdentifier:@"ShowPlaces" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"ShowPlaces"]) {

        PlacesViewController *placesViewController = [segue destinationViewController];

        // --> I believe I'm missing something here to access a specific row? <--



    }
}

我希望有一个人可以帮助我!

4

5 回答 5

2

您从 tableView:accessoryButtonTappedForRowWithIndexPath: 函数中的 indexPath 获取特定行。具体来说,被点击的行是 indexPath.row。(如果您的表格有多个部分,那么您也可以从 indexPath 中读取该部分,但听起来您只是在使用一个简单的表格。)

您可以将当前行存储在一个变量中,然后在 prepareForSegue:sender 中读取它以选择去哪里。

于 2011-12-15T22:04:15.350 回答
2

The documentation for UIViewController's -prepareForSegue:sender: says:

Because segues can be triggered from multiple sources, you can use the information in the segue and sender parameters to define the context for the segue and pass the appropriate information. For example, if the segue originated from a table view, the sender parameter would identify the table view cell that the user tapped. You could use that information to set the data on the destination view controller.

Given that, I'd look first at the sender parameter and expect it to be a pointer to the table cell. If you know which table the cell should be in, you can use -indexPathForCell: to retrieve the cell's index path.

于 2012-01-01T01:30:28.337 回答
0

如果您的发送者对象是一个 tableviewcell,下面的代码片段应该可以工作:

NSIndexPath *indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender];

否则试试

NSIndexPath *indexPath = nil;
if ([sender isMemberOfClass:[UITableViewCell class]]) 
{
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender]; 
}
else if ([[sender superview] isMemberOfClass:[UITableViewCell class]])
{
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[sender superview]];
}
else if ([[[sender superview] superview] isMemberOfClass:[UITableViewCell class]])
{
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
}
于 2012-01-06T12:55:45.043 回答
0

您可以将 segue 从视图控制器拖到您想要在按下详细信息披露按钮时显示的视图。您可以从代码中触发 segue,如下所示

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"UpdateData" sender:self];
}

来自奥地利马丁的欢呼

于 2012-01-01T00:19:46.863 回答
0

您在准备 segue 时使用的发件人可以是您想要的任何人。如果您想知道行,请发送行或索引路径:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {


    NSUInteger rowNumber = [indexPath row];   
    NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber];

    self.categoryData = [self.commuterDict objectForKey:categoryCode];

    [self performSegueWithIdentifier:@"ShowPlaces" sender:indexPath];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"ShowPlaces"]) {

        PlacesViewController *placesViewController = [segue destinationViewController];

        // Row information is supplied as the sender
        NSIndexPath *indexPath = sender;


    }
}

如果要使用实际行,则将其设为发件人

[self performSegueWithIdentifier:@"ShowPlaces" sender:[tableView cellForRowAtIndexPath:indexPath]];
于 2012-08-09T19:16:56.583 回答