【问题标题】:Dimissing TableViewController unwinds to first storyboard关闭 TableViewController 展开到第一个故事板
【发布时间】:2016-11-25 05:39:37
【问题描述】:

我在 UINavigationController 中嵌入了一个 UITableViewController。

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

如果我选择一个列表项,则从 didSelectRowAtIndexPath 调用委托方法 didSelectFromList,应用程序将返回主屏幕(主视图),如下所示 红线。

我想要的是紫色线。

有什么帮助吗?

尝试 1:

我让委托解除 List TableVC。

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

在列表视图控制器中

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

   ///.. stuff to find the correct string

   [self.delegate didSelectFromList:item];


}

尝试 2:

在这里,我让 List TableVC 自行消失。

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

}

在列表视图控制器中

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

   ///.. stuff to find the correct string

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

    }];
}

我也尝试过 List TableVC 中的 didSelectRowAtIndexPath

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

    }];

【问题讨论】:

  • 不是从 detailVC 推送导航控制器,而是呈现具有列表表 VC 的导航控制器。在这种情况下,[self.nav dismissviewCOntroller 将起作用,
  • 这是正确的答案。我是在推送列表而不是展示它。

标签: ios objective-c uitableview uinavigationcontroller uistoryboard


【解决方案1】:

如果您继续推送视图控制器,它们会被添加到导航堆栈中,因此如果您执行 [self dismiss 或 [self.navigationControllerdismiss],所有导航堆栈都会被清除,您将进入 rootViewController。

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

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 2014-11-13
    • 2012-01-22
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2017-05-14
    • 2017-02-22
    相关资源
    最近更新 更多