小控件实现

作者: sydie | 来源:发表于2015-09-06 18:39 被阅读89次

    - 一个控制器中包含多个子控制器。

    - 分析:可以利用父子关系,建立联系。一个控制器可以有一个父控制器,也可以有多个子控制器。就像导航控制器,tabbar是它的父控制器,它又可以添加多个子控制器。

    - 逻辑分析:

          -- 这里上面有5个按钮,点击每个按钮,出现不一样的画面。第一种是添加5个view,交给父控制器——也就是整个界面管理,但是一旦逻辑复杂,这个大的父控制器很有可能会累死!另外还有一种方法,每个按钮点击,就创建一个新的控制器,也就是说添加5个控制器,而最大的父控制器只需要管理上面的这个bar。那总共就需要创建6个控制器。就能完美的解决这个问题了。

    - 界面分析:

        -- 01.添加scrollView:滑动屏幕和点击按钮都可以进入与之对应的控制器,说明最大的这个控制器需要添加一个scrollView,并且能够分页。

      -- 02.细节处理:在iOS7之后,添加到导航栏的控制器或者View都会产生一个自动布局滚动边距,添加一个控制器或者view进去,它的y值会加上一个64,但是又只会影响一个控制器或者view,所以这个属性有时挺碍事的,在这里我们需要把这个属性去掉。并且也要把它的水平滚动条和垂直滚动条去掉。

      -- 03.添加5个按钮。这5个按钮表面上看只需要添加5个词语,一个红色的view就可以了。观察可以看到5个按钮的背景颜色是一样的,高亮状态是一样的。所以可以添加一个viewBar,在这个bar中利用循环添加5个按钮。

      -- 04.按钮细节处理。在这里按钮的文字恰巧都是两个字,所以按钮的宽度非常好设定,但是如果文字的字数是不一样的,那么宽度就需要根据文字进行计算了。

    // 添加标签bar

    NSArray*titleArray = @[@"全部",@"视频",@"声音",@"图片",@"段子"];

    UIView*titleView = [[UIView alloc] init];

    [titleView setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.7]];

    titleView.width=CXLScreenW;

    titleView.height=CXLTitleViewHeight;

    titleView.x= 0;

    titleView.y=CXLNavigationBarMaxY;

    [self.viewaddSubview:titleView];

    // 添加底部红色条

    UIView *bottomView = [[UIView alloc] init];

    bottomView.height= 2;

    bottomView.y= titleView.height- bottomView.height;

    [bottomView setBackgroundColor:[UIColor redColor]];

    [titleView addSubview:bottomView];

    self.bottomView= bottomView;

    // 添加按钮

    CGFloatbtnW = titleView.width/ titleArray.count;

    CGFloatbtnH = titleView.height;

    for(int i = 0; i<titleArray.count;i++){

    // 按钮创建

    CXLTitleButton*button = [CXLTitleButton buttonWithType:UIButtonTypeCustom];

    button.frame=CGRectMake(i*btnW, 0, btnW, btnH);

    [button addTarget:selfaction:@selector(didTitleButton:) forControlEvents:UIControlEventTouchUpInside];

    [titleView addSubview:button];

    button.tag= i;

    [self.buttonArray addObject:button];

    [button setTitle:titleArray[i] forState:UIControlStateNormal];

    if(i==0) {

    // 默认被选中

    button.selected=YES;

    self.clickedButton= button;

    [button.titleLabel sizeToFit];

    self.bottomView.width= button.titleLabel.width;

    self.bottomView.centerX= button.centerX;

    }

    }

      -- 05.添加5个子控制器,添加完成就可以设置scrollView的滚动范围了。

      -- 06. 监听按钮的点击,设置选中状态三部曲。利用动画设置滚动效果

    -- 07.点击按钮后,控制器需要滚动。这里需要使用到scrollView的代理方法。点击按钮时停止滚动,与拖动停止滚动都要实现代理方法。

    - 控制器内部的实现,涉及到数据问题,另外讲述。这里主要意识到的就是子控制器与父控制器的问题。可以通过父子控制器这条线,拿到数据,或者做很多逻辑判断,非常方便。

    相关文章

      网友评论

        本文标题:小控件实现

        本文链接:https://www.haomeiwen.com/subject/zphrcttx.html