iOS开发iOS学习笔记IOS

小控件实现

2015-09-06  本文已影响89人  sydie

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

- 分析:可以利用父子关系,建立联系。一个控制器可以有一个父控制器,也可以有多个子控制器。就像导航控制器,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的代理方法。点击按钮时停止滚动,与拖动停止滚动都要实现代理方法。

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

上一篇下一篇

猜你喜欢

热点阅读