利用segment切换三个控制器

需求如下:


屏幕快照 2019-04-18 上午9.45.45.png

点击今日待办、我的待办、我的办结切换不同的页面。

思路:

  • 上一篇文档中,我针对segment切换页面的时候,采用的是数据源的切换,然后页面共用的是一个。但是今天这个需求变了,因为每个页面对应的数据源是有些变化的,比如今日待办中,每一个item中,是有点击下载的按钮,包括不同的页面,对应的headerView也不一样。所以我就想到了,创建一个管理器VC来管理三个不同的控制器。每个控制器完成各自的功能。

具体实现:

@interface SCInspectionManageVC ()
@property (nonatomic,strong)SCSegmentView *segmentView;
@property (nonatomic, strong)SCInspectionTodayTodoVC *todayVC;//今日待办
@property (nonatomic, strong)SCInspectionTodoVC *todoVC;     //我的待办
@property (nonatomic, strong)SCInspectionCompleteTodoVC *completeVC;//我的办结
@property (nonatomic, strong) UIViewController *currentViewController;
@property (nonatomic,strong)SCInspectionTodoInteractor *interactor;

@end
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self setNavItem];
    [self addSubViews];
    [self setConstraints];
    [self addChildViewControllers];
}

- (void)addChildViewControllers{
    self.todayVC = [[SCInspectionTodayTodoVC alloc] init];
    self.todayVC.view.frame = CGRectMake(0, kStatusBarAndNavigationBarHeight, kSCREEN_WIDTH, kSCREEN_HEIGHT-iPhoneXSafeAreaBottomHeight-kStatusBarAndNavigationBarHeight);
    [self addChildViewController:self.todayVC];
    
    self.todoVC = [[SCInspectionTodoVC alloc] init];
    self.todoVC.view.frame = CGRectMake(0, kStatusBarAndNavigationBarHeight, kSCREEN_WIDTH, kSCREEN_HEIGHT-iPhoneXSafeAreaBottomHeight-kStatusBarAndNavigationBarHeight);
    [self addChildViewController:self.todoVC];
    
    self.completeVC = [[SCInspectionCompleteTodoVC alloc] init];
    self.completeVC.view.frame = CGRectMake(0, kStatusBarAndNavigationBarHeight, kSCREEN_WIDTH, kSCREEN_HEIGHT-iPhoneXSafeAreaBottomHeight-kStatusBarAndNavigationBarHeight);
    [self addChildViewController:self.completeVC];
    
//设置当前最先展示的页面 很重要
    self.currentViewController = self.todayVC;
    [self.view addSubview:self.todayVC.view];
}

- (void)setConstraints{
    [self.segmentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(48);
        make.top.leading.trailing.mas_equalTo(self.view);
    }];
}

- (void)setNavItem{
    self.title = @"巡检待办";
}

-(void)addSubViews{
    [self.view addSubview:self.segmentView];
    self.view.backgroundColor = [UIColor SCBackGroundColor];
}

-(SCSegmentView *)segmentView{
    if (!_segmentView) {
        _segmentView = [[SCSegmentView alloc]initWithItemList:@[@"今日待办",@"我的待办",@"我的办结"]];
        @Weakify(self);
        _segmentView.segmentSwitchBlock = ^(long segmentIndex) {
            @Strongify(self);
            [self segmentValueChanged:segmentIndex];
        };
    }
    return _segmentView;
}

-(SCInspectionTodoInteractor *)interactor{
    return _interactor = _interactor?:[[SCInspectionTodoInteractor alloc]init];
}

下面这个是实现标签切换最重要的一个步骤

- (void)segmentValueChanged:(long )selectedSegmentIndex{
    if ((self.currentViewController==self.todayVC&&selectedSegmentIndex==0)||(self.currentViewController==self.todoVC&&selectedSegmentIndex==1) ||(self.currentViewController==self.completeVC&&selectedSegmentIndex==2) ) {
        return;
    }
    
    UIViewController *oldViewController=self.currentViewController;
    switch (selectedSegmentIndex) {
        case 0:
            [self replaceFromOldViewController:oldViewController toNewViewController:self.todayVC];
            break;
        case 1:
            [self replaceFromOldViewController:oldViewController toNewViewController:self.todoVC];
            break;
        case 2:
            [self replaceFromOldViewController:oldViewController toNewViewController:self.completeVC];
            break;

        default:
            break;
    }
}

//控制器切换
- (void)replaceFromOldViewController:(UIViewController *)oldVC toNewViewController:(UIViewController *)newVC{
    [self transitionFromViewController:oldVC
                      toViewController:newVC
                              duration:1
                               options:UIViewAnimationOptionTransitionCrossDissolve
                            animations:^{
                            }
                            completion:^(BOOL finished) {
                                if (finished) {
                                    self.currentViewController=newVC;
                                }else{
                                    self.currentViewController=oldVC;
                                }
                            }];
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • “忙,懒,烦” 似乎成了很多人不愿提早10分钟起来做早餐的理由。 对于早餐,很多人都选要么不吃,要么随便吃。忙着上...
    小芳带你健康瘦阅读 513评论 1 0
  • 说实话,处在这样一个信息爆炸的年代,要让自己知道对自己而言什么事是真正重要的,挺难。先不说别的,就拿“吃什么健康?...
    yydhdl阅读 625评论 0 1
  • 上海女人 下午,去街道办事处办事。进门,感觉像走进一家银行,宽敞,洁净。人不多,也不...
    东来到西啦阅读 182评论 0 1
  • 最近特别困,坐着就能睡着,不分时间不分场合。俗话说“春困秋乏夏打盹,睡不醒的冬三月”,看来天冷的真是提前入冬了。明...
    沈磊阅读 295评论 0 0