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.
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];
}];
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, –
Das ist die richtige Antwort. Ich drängte die Liste, anstatt sie zu präsentieren. –