0

Ich habe einen UITableViewController in einem UINavigationController eingebettet.Dimissing TableViewController entwirrt zum ersten Storyboard

Wenn ich auf eine Schaltfläche in meiner Detailansicht (Detailansicht ist in einem UITabViewController) zu showList klicken, wird der UITableViewController (List Table View) namens List angezeigt. Detailansicht von der blauen Linie

Wenn ich eine Liste Darstellung Element Wählen Sie die delegierte Methode didSelectFromList aus den didSelectRowAtIndexPath aufgerufen: Wenn ich die Back Button in der Navigationssteuerung klicken, ich bin die richtig Bildschirm zurückgenommen und die App wird zurück zum Hauptbildschirm (Home View) gebracht, der durch die rote Linie angezeigt wird.

Was ich will, ist die violette Linie.

enter image description here

Jede Hilfe?

Versuch 1:

lasse ich den Delegierten die Liste TableVC entlassen.

#import "ListTableViewController.h" 
@interface CallDetailViewController() <ListTableViewControllerDelegate> 
@property (nonatomic, strong) LotListTableViewController * lltvc; 
@end 


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

    if ([[segue identifier] isEqualToString:@"segue_list"]) { 
     self.lltvc = (ListTableViewController*)segue.destinationViewController; 
     self.lltvc.delegate = self; 
    } 

} 

- (void) showList { 
    [self performSegueWithIdentifier:@"segue_list" sender:self]; 
} 

#pragma mark LIST SELECTION DELEGATE METHOD 

- (void) didSelectFromList:(NSString *)item { 
    [self.lltvc dismissViewControllerAnimated:YES completion:^{ 
     NSLog(@"Did Select item: %@", item); 
    }]; 
} 

in der Liste TABLE-View-Controller

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

    ///.. stuff to find the correct string 

    [self.delegate didSelectFromList:item]; 


} 

Versuch 2:

Hier lasse ich die Liste TableVC selbst dimiss.

#import "ListTableViewController.h" 
@interface CallDetailViewController() <ListTableViewControllerDelegate> 

@end 


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

    if ([[segue identifier] isEqualToString:@"segue_lots"]) { 
     NSLog(@"GOING TO THE LOT LIST"); 

     UINavigationController * nvc = (UINavigationController*)segue.destinationViewController; 
     LotListTableViewController *lltvc = [nvc childViewControllers][0]; 
     lltvc.delegate = self; 

    } 

} 

- (void) showLotList { 
    [self performSegueWithIdentifier:@"segue_lots" sender:self]; 

} 
#pragma mark LIST SELECTION DELEGATE METHOD 

- (void) didSelectFromList:(NSString *)item { 
     NSLog(@"Did Select item: %@", item); 

} 

in der Liste TABLE-View-Controller

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

    ///.. stuff to find the correct string 

    [self dismissViewControllerAnimated:YES completion:^{ 
     [self.delegate didSelectFromList:item]; 

    }]; 
} 

Ich habe auch von der DidSelectRowAtIndexPath in der TableVC

Liste versucht
[self.navigationController dismissViewControllerAnimated:YES completion:^{ 
     [self.delegate didSelectFromList:item]; 

    }]; 
+1

Anstatt den Nav-Controller von DetailVC zu drücken, präsentieren Sie den Nav-Controller, der die Listentabelle VC hat. In diesem Fall funktioniert [self.nav dismissviewCOntroller, –

+0

Das ist die richtige Antwort. Ich drängte die Liste, anstatt sie zu präsentieren. –

Antwort

2

Wenn Sie auf dem Druck-View-Controller halten, bekommen sie Wenn Sie [selbst ablehnen oder [self.navigationController ablehnen] tun, wird der gesamte Navigationsstapel gelöscht und Sie werden es tun zum rootViewController genommen.

Entweder können Sie einen View-Controller aufrufen oder Anstatt den Navigationscontroller aus DetailVC zu drücken, müssen Sie den Navigationscontroller mit der Listentabelle VC anzeigen. In diesem Fall wird [self.nav dismissviewCOntroller funktionieren,