Dimissing TableViewController展开到第一个故事板

时间:2016-07-21 14:48:04

标签: ios objective-c uitableview uinavigationcontroller uistoryboard

我在UINavigationController中嵌入了一个UITableViewController。

当我单击详细视图中的按钮(详细信息视图位于UITabViewController中)到Back时,会显示名为List的UITableViewController(列表视图)。 如果我单击导航控制器中的didSelectFromList按钮,我将收回 正确的 屏幕:蓝线所示的详细信息视图

如果我选择一个列表项,则从didSelectRowAtIndexPath调用委托方法#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); }]; } ,并将应用程序恢复到主屏幕(主视图),如图所示 红线。

我想要的是紫线。

enter image description here

任何帮助?

尝试1:

我让委托解雇List TableVC。

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

   ///.. stuff to find the correct string

   [self.delegate didSelectFromList:item];


}

在LIST TABLE VIEW CONTROLLER中

#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);

}

尝试2:

这里我让List TableVC自己动摇。

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

   ///.. stuff to find the correct string

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

    }];
}

在LIST TABLE VIEW CONTROLLER中

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

    }];

我也尝试过List TableVC中的didSelectRowAtIndexPath

{{1}}

1 个答案:

答案 0 :(得分:2)

如果继续按下视图控制器,它们会被添加到导航堆栈中,所以如果你这样做[自解除或[self.navigationController解除,所有导航堆栈都被清除,你将进入rootViewController。

您可以弹出一个视图控制器或 而不是从detailVC推送导航控制器,而是呈现具有列表VC的导航控制器。在这种情况下,[self.nav dismissviewCOntroller将起作用,