ios-导航控制器UINavigationController

ios-导航控制器UINavigationController


前篇

由于使用 webview 的时候, load 出来的 页面是全屏的 网页, 没有地方触发 webview 的关闭, 也就是 有去无回, 因此需要使用 一个导航控制器去关闭 webview. (虽然还有其他办法去关闭 webview, 但是感觉 导航控制器 简单点)


流程

  1. 新建一个 EmptyViewController, 用来装 view (如: webview)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // -------------- EmptyViewController.h
    @interface EmptyViewController : UIViewController
    @property (strong, nonatomic) UIViewController* lastVc; // 保存上一个 UIViewController, 关闭 EmptyViewController 时需要重置回上一个 UIViewController
    - (IBAction) onClick04:(id)obj;
    - (IBAction) onClick05:(id)obj;
    - (IBAction) onBackNavItem:(id)obj;
    @end

    // -------------- EmptyViewController.h
    #import "EmptyViewController.h"
    @implementation EmptyViewController
    - (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"--- EmptyViewController.viewDidLoad");
    self.navigationItem.title=@"第一个界面";
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"< Back" style:UIBarButtonItemStylePlain target:self action:@selector(onBackNavItem:)];
    }
    - (IBAction) onBackNavItem:(id)obj {
    NSLog(@"--- onBackNavItem");
    // 点击 back 时, 重置回 上一个 UIViewController
    UIWindow* topWin = [UIApplication sharedApplication].windows[0];
    topWin.rootViewController = self.lastVc;
    }
    - (void)viewDidDisappear:(BOOL)animated{ // UIViewController dismiss 的回调, 用来做清理工作
    [super viewDidDisappear:animated];
    }
    - (IBAction) onClick04:(id)obj {}
    - (IBAction) onClick05:(id)obj {}
    @end
  2. 创建 导航控制器 UINavigationController

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //1.创建一个导航控制器
    UINavigationController *nav=[[UINavigationController alloc]init];

    //2.设置导航控制器为window的根视图
    UIWindow* topWin = [UIApplication sharedApplication].windows[0];
    UIViewController* srcVc = topWin.rootViewController;
    topWin.rootViewController = nav;

    //3.添加子控制器到导航控制器中
    // 方式 1. 自定义 ui 布局的 vc
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Empty" bundle:nil];
    EmptyViewController *one = [storyboard instantiateViewControllerWithIdentifier:@"sid_empty"];
    // 方式 2. 空 vc
    // EmptyViewController* one = [EmptyViewController new];
    one.lastVc = srcVc;
    [nav pushViewController:one animated:YES];
  3. done.