UINavigationViewController 控件 UIContainerView 嵌入 segue

Posted

技术标签:

【中文标题】UINavigationViewController 控件 UIContainerView 嵌入 segue【英文标题】:UINavigationViewController control UIContainerView embed segue 【发布时间】:2017-06-11 11:30:54 【问题描述】:

我有以下情况:

UIViewController 嵌入在 UINavigationViewController 中。 UIViewController 附加了一个 UINavigationItem 并有一个 UIContainerView 作为子视图。 UIContainerView 有一个嵌入到带有一些静态行的 UITableViewController 的 segue。

我怎样才能做到这一点,以便当用户按下高级行的 右边的小箭头图片,UIViewContainer 的嵌入 segue 更改为引用另一个 UITableViewController 并有一个 Back UINavigationController 上的按钮,以便用户可以导航 回到原来的 UITableViewController(带动画)?

基本上我希望用户能够在设置和高级设置之间切换。

我尝试过的事情: 我尝试让容器视图嵌入到 UINavigationController 中。第一个 UITableViewController 设置为与 UINavigationController 具有根视图控制器的 segue 关系。然后,我在箭头(按钮)和另一个 UITableViewController 之间进行了演示。通过这种方式,我能够在设置 -> 高级设置 -> 设置之间进行转换,但我有双导航栏。一个是我想要的栏,顶部是白色的,另一个是灰色的,出现在下方,显示后退按钮的位置。我希望它是一个单一的导航栏(白色的)。

我可以毫无问题地使用代码来实现我想要的(Objective-C 或 Swift)。

【问题讨论】:

我忘了提这个,我会在这之后编辑问题,但我使用代码没有问题。事实上,我正在考虑使用 prepareSegue 来保留对第一个 UINavigationController 的引用,然后当 UITableView 以编程方式出现时,将后退按钮添加到 UINavigationView。 如果我正确理解您的目标,您有多种选择。 1) 使用非静态表,并根据 Basic/Adv 设置重新加载更改显示的行,或 2) 使用新 NavigationController 作为 Container 内容,隐藏其 NavBar(只需从代码中推送/弹出),或 3) 使用单独的视图/表视图作为容器内容,并使用简单的视图动画在不同的设置表之间进行转换。您是否已经有了“这就是我希望它的外观/功能”的想法? 【参考方案1】:

最后,我通过添加后退按钮并以编程方式关闭“高级设置”视图控制器来通过代码完成此操作。我通过为“高级设置”UITableView 创建一个显示序列来实现这一点。然后我将 UITableViewController 子类化:

@implementation AdvancedSettingsController

- (void)viewDidLoad

  [super viewDidLoad];

  UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(goBack)];
  self.navigationController = (UINavigationController*)self.parentViewController;
  self.parentViewController.parentViewController.navigationItem.leftBarButtonItem = backButton;


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];


#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

#warning Incomplete implementation, return the number of sections
    return 0;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

#warning Incomplete implementation, return the number of rows
    return 0;


-(IBAction)goBack

  [self.navigationController popViewControllerAnimated:YES];

@end

我只是想使用 Xcode 构建器来完成它以使过程自动化一点,因为我不喜欢 self.parentViewController.parentViewController 的东西,因为如果我更改我的控制器,它将停止工作并且有点困难阅读。

End result (webm) - https://webmshare.com/m8Kne

【讨论】:

以上是关于UINavigationViewController 控件 UIContainerView 嵌入 segue的主要内容,如果未能解决你的问题,请参考以下文章