Storyboard Segue From View Controller to Itself

前端 未结 9 2090
无人及你
无人及你 2020-12-04 16:39

I am trying to make a mechanism to drill down a file / folder list. The idea is to show the same file list view controller every time the user selects a folder, and show a f

相关标签:
9条回答
  • 2020-12-04 16:55

    Instead of performing a segue to the same controller, you can instantiate a view controller (the same one) from storyboard, and then push that onto the navigation controller.

    0 讨论(0)
  • 2020-12-04 17:07

    Interface Builder approach: Just segue to a storyboard reference which refers back to the presenting view controller.

    0 讨论(0)
  • 2020-12-04 17:08

    In IOS 6, there is a cleaner solution than using a phantom button. You can still define the segue from the table cell to the view controller, and look at the sender to cancel the automatically triggered segue:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        //storyboards should use segues and override prepareForSegue instead
        //but here we need custom logic to determine which segue to use
        id item = [self.fetchedResultsController objectAtIndexPath:indexPath];
        if (item meets condition) {
            [self performSegueWithIdentifier:@"segue1" sender:self];
        } else {
            [self performSegueWithIdentifier:@"segue2" sender:self];
        }
    }
    
    - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
        //ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath
        return (sender == self);
    }
    
    0 讨论(0)
  • 2020-12-04 17:08

    Hope this helps.

    I found that you can create multiple prototype cells.

    Than you can link every cell (in the Storyboard) to a different View.

    Something like this:

    NSString *CellIdentifier = @"Cell"; 
    if (Condition2 ){
    CellIdentifier = @"Cell2"; } 
    if (Condition3 ){
    CellIdentifier = @"Cell3"; }
    
    0 讨论(0)
  • 2020-12-04 17:09

    If you are using a navigation controller you need to push the ViewController into the nav stack. In this example, i named my ViewController "VDI" in my Storyboard ID setting.

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
    YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"];
    [self.navigationController pushViewController:dest animated:YES];
    

    If you don't want the NavigationController to keep adding itself into your "Back" history you can pop the stack before adding to it like so.

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
    YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"];
    UINavigationController *navController = self.navigationController;
    [navController popViewControllerAnimated:NO];
    [navController pushViewController:dest animated:YES];
    
    0 讨论(0)
  • 2020-12-04 17:14

    Here's how you can push another instance of the current view controller without defining a segue or hardcoding its own identifier:

    SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier];
    [self.navigationController pushViewController: same animated: YES];
    

    You just need to set the Restoration ID to be the same as Storyboard ID (there's a checkbox for that in IB).

    0 讨论(0)
提交回复
热议问题