专栏名称: Adrenine
iOS开发
51好读  ›  专栏  ›  Adrenine

iOS实战之页面跳转

Adrenine  · 掘金  ·  · 2017-12-13 08:46

正文

假如有多级页面Root->A->B->C的跳转,现需要从C返回到A,做法有如下:

有人可能会说,直接pop两下就好了,like this: ❎错误姿势❌:

//C.m
- (void)back {
  [self.navigationController popViewControllerAnimated:NO];  //pop到B
  [self.navigationController popViewControllerAnimated:YES];  //pop到A
}

可以试一试,要是能达到效果算我输!!! pop到B以后self.navigationController=nil,可以想想是为什么?(页面pop出去了,导航栏当然也跟着出去了,所以下面这个pop根本不起作用)

✅正确姿势一: 由上面错误姿势得到启发,第二个pop不是不起作用吗,那就让B页面去做pop,通知,代理,block都行

//C.h

// 定义Block
typedef void(^BackBlock)(void);
@property(nonmatic,copy) BackBlock backBlock;

//C.m
// 返回事件
- (void)back {
  [self.navigationController popViewControllerAnimated:NO];
  if(self.backBlock) {
    self.backBlock();
  }
}
//B.m
C *c = [C new];
c.backBlock = ^{  //让B来执行回调,pop页面
  [self.navigationController popViewControllerAnimated:NO];
};
[self.navigationController pushViewController:c animated:YES];

总结:虽然能实现,但是很麻烦,还需要写清动画YES还是NO,不然pop几个都有动画的页面会很突兀。







请到「今天看啥」查看全文