【发布时间】: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