我有一个tableview控制器,我想覆盖最后一行的segue。我不想将其发送到标准目标视图控制器,而是将其发送到另一个控制器。我该怎么做呢?

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *myIndexPath = [self.tableView
                            indexPathForSelectedRow];
    long row = [myIndexPath row];
    if ([[segue identifier] isEqualToString:@"ShowLocationsTableView"])
    {
        LocationsTableViewController *ViewController =
        [segue destinationViewController];

        ViewController.categoryDetailModel = @[_categoryTitle[row],
                                            _categoryImages[row]];
    }
}


这是当前的prepareForSegue,我想更改它。我想使用segue“ aboutCat”将其发送到另一个视图控制器。我该怎么做呢?

我不明白prepareForSegue [当前]和viewDidLoad [目标]之间会发生什么。谢谢

副作用

最初的问题已由“ Nikita Took”解决,但存在一些副作用

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *myIndexPath = [self.tableView indexPathForSelectedRow];
    long row = [myIndexPath row];
    if ([_categoryTitle[row] isEqualToString:@"About"])
    {
        NSLog(@"SKIPPING PREPARE");
    }
    else if ([[segue identifier] isEqualToString:@"ShowLocationsTableView"])
    {
        LocationsTableViewController *ViewController =
        [segue destinationViewController];

        ViewController.categoryDetailModel = @[_categoryTitle[row],
                                            _categoryImages[row]];
    }
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == self.tableView)
    {
        // I assume you have 1 section
        NSLog(@"DIDSELECTROW");
        NSLog(@"INDEX PATH %i", indexPath.row + 1);
        NSLog(@"%i", [tableView numberOfRowsInSection:0]);
        if (indexPath.row + 1 == [tableView numberOfRowsInSection:0])
        {
            NSLog(@"ABOUT");
            [self performSegueWithIdentifier:@"aboutCat" sender:self];
        }
        else
        {
            NSLog(@"ELSE");
            [self performSegueWithIdentifier:@"ShowLocationsTableView" sender:self];
        }
    }
}


现在关于作品!!!但是,如果我单击mainSegue之一的另一行。它将调用子视图控制器2x。我可以在detailview viewdidload中使用NSLOG语句进行验证。问题在于,现在导航控制器需要执行两个步骤才能返回家中。

[首页]-> [详细视图]-> [相同详细视图]

我可以验证didselectrowatindexpath是否在prepareforsegue之前发生

有什么想法为什么要执行两个segue?

最佳答案

假设您有两个选择:MainSegue(对于最后一行除外的所有行)和LastRowSegue(对于最后一行),您可以执行以下操作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == self.tableView) {
        // I assume you have 1 section
        if (indexPath.row == [tableView numberOfRowsInSection:0]) {
            [self performSegueWithIdentifier:@"LastRowSegue" sender:self];
        } else {
            [self performSegueWithIdentifier:@"MainSegue" sender:indexPath];
        }
    }
}


尝试使用prepareForSegue。如果不是您所需要的,请解释您的意思


  它有效,但我正在获得双层表视图


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"MainSegue"]) {
        NSIndexPath *selectedIndexPath = sender;
        LocationsTableViewController *locationController = segue.destinationViewController;
        locationController..=categoryDetailModel = @[_categoryTitle[selectedIndexPath.row], _categoryImages[selectedIndexPath.row]];
    }
}

关于ios - iOS覆盖Segue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24858536/

10-13 04:05