UINavigationController - Paul9237/Note-iOS- GitHub Wiki

1. 从 UINavigationController 中的page页跳转到其他界面的时候,在顶部的右上角会有一个黑影闪过,该会在两个界面切换的过程中出现,据说iOS 7以上会出现。

解决方式:自己继承一个UINavigationController 并在viewDidLoad 方法中对 view 的 backgroundColor 设置为 任意颜色(主要目的是遮住黑影,不能是透明色(clearColor))

2. 跳转。

每个 NavigationController 可以理解为一个界面栈,不断往里面pushViewController就形成了一连串的前后关系,有了先后关系才会存在顶部的导航栏以及Back按键,所以,想在栈里面不断放新的ViewController就是不断调用 navigationController 的 pushViewController,这是他的核心api。

如果是故事板,则需要在故事板中两个界面增加一条跳转线,并给跳转线增加id,如下"planDetail"。

[self performSegueWithIdentifier] 则大致等于 [self.navigationController pushViewController]

    UIViewController *controller = [PlanDetailViewController new];
    [self.navigationController pushViewController:controller animated:YES];
    // 或者
    [self performSegueWithIdentifier:@"planDetail" sender:nil];

参数的传递则是在 prepareForSegue 方法中进行,通过 segue.destinationViewController 拿到目标viewController,然后直接设置参数,参数反传同理,通过设置回调将参数带回来。

3. 关闭。

由于理解了2中说的 NavigationController 是一个栈,那么就能理解这里想要退出当前界面,回到栈里面的前一个界面使用的应该是[self.navigationController popViewControllerAnimated]来进行退出,而不是[self dismissViewControllerAnimated]

dismissViewControllerAnimatedpresentViewControllerAnimated 是成对出现的