在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、梗概: 1、自定义:headerView,footerVie,Cell等 2、双模型(遵循单一原则,类或模型实现的功能尽量单一) 3、计算文本的方法(针对不同文本内容而设置的宽高等) 4、设置footerView和headerView的注意事项(能修改的值可以是xmargin和高度,有些是不能修改的方法 ,采取方式:设置一个tempView,实际的操作都在tempView中进行) 5、UIActivityIndicatorView(转动菊花)startAnimating/stopAnimating 6、注意alpha=0和clean color 的区别(alpha=0设置,其子控件也会相应的看不见,但是cleancolor的话,只能让其颜色变为透明,子控件依旧可见) 7、延迟的方法(performSelector/dispatch_after(GCD :grand central dispatch)) 二、自定义headerView(ScrollView和pageControl) 创建一个bannerview 继承自UIView @property (nonatomic ,strong) NSArray* imageArray;//数据定义在viewcontroller中,功能要分开 a、设置scrollview b、设置pageControl 1、设置ScrollView属性(滚动的范围和图片的大小和数量有关,暂时不设置contentSize) scrollview.showsHorizontalScrollIndicator =NO; scrollview.pagingEnabled=YES; 将scrollview实例化 self.scrollview=scrollview;
2、设置pagecontrol属性(总的page数和数组的图片数量有关,暂不设置 numberOfPages) pagecontrol.currentPage =0; pagecontrol.pageIndicatorTintColor =[UIColor grayColor]; pagecontrol.currentPageIndicatorTintColor=[UIColor redColor]; 将pagecontrol实例化 self.pagecontrol=pagecontrol;
3、设置pagecontrol的总页数和scrollView的滚动范围 scrollview.contentSize =CGSizeMake(count*self.bounds.size.width,0); pagecontrol.numberOfPages=ImageArray.count;
4、设置根据scrollview的滚动让pagecontrol的currentpage跟随着变化(contentOffset scrollviewDidEndDecelerating) -(void) scrollviewDidEndDecelerating:(UIScrollView*)scrollview { _pagecontrol.currentPage = _scrollview.contentOffset.x/(self.bounds.size.width); }
5、如何在viewcontroller的tableview调用该bannerview作为其headerview #import "BannerView.h" BannerView *bannerview=[[BannerView alloc]initWithFrame:CGrectMake(0,0,[UIScreen mainScreen].bounds.size.width,200)]; BannerView.imageArray =@[@"",@"",@"",@""];//传入图片数据 tableview.tableHeaderView =bannerview;
三、自定义footerView(两个方法,一、直接手动添加footerview 二、xib) 三(1)手动添加footerView UIView *tempView =[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.bounds.size.width,120)];
UIButton *footerbtn =[[UIButton alloc]initWithFrame:CGRectMake(10,10,self.view.bounds.size.width-20,65)]; [footerbtn setTitle :@"点击加载更多" fotState :UIControlStateNormal]; //如果要实现footerbtn的方法,用addTarger footerbtn.BackgroundColor=[UIColor orangeColor]; [tempView addSubview:footerbtn]; tableview.tableFooterView =tempView;
三(2)通过xib设置footerview 1、创建名为FooterView的Xib文件 并关联属性 2、在viewcontroller中的tableview中加载footerview(NSBundle mainBundle loadNibNamed) #import "FooterView.h" FooterView *footerView =[[[NSBundle mainBundle]loadNibNamed:@"FooterView" owner:nil options:nil]lastObect]; tableview.tableFooterView =footerview(此时,不需要定义临时视图就可以直接添加了) 3、实现footerview中的加载按钮,实现(按钮文字变换,菊花转动,插入新的数据) 1)在xib中加入一个view其中包含UIActivityIndicatorView和label:正在加载中 并把这个view 的alpha设置为0 注意,当把view的背景色设置为cleanColor 虽然view不见了,可是label“正在加载中”和菊花仍在 而alpha=0则view及view里面所有子控件都看不见 1)定义btnclick 的方法 -(IBAction)loadButton:(id)sender{ } -(void)showLoadViewWith:(BOOL)isShow { _moreView.alpha=0; if(isShow) {[_activiteView startAnimating];} else{[_activiteView stopAnimating];}} 2)当footerview中的按钮被点击的时候,viewController中应该为其传入数据(此处可以联想到使用代理) 2.1)怎么实现代理?? a、@class FooterView; b、@protocol FooterViewDelegate<NSObject> c、定义代理方法 -(void )footerview:(FooterView *)footerView; d、创建代理属性(weak注意用weak,用strong的话,双方都是强引用,造成循环引用而不被释放) @property (nonatomic,weak)if<FooterViewDelegate>delegate; e、在执行方法的button事件中,触发代理方法通知获取数据(self.delegate respondsToSelector:@selector(footerView:)]) -(IBAction)loadButton:(id)sender{ if([self.delegate respondsToSelector:@selector(footerView:)]){ [self.delegate footerView:self];}} f、在viewcontroller中实现代理方法 <FooterViewDelegate> -(void)footerView:(FooterView*)footerView { [footerView showLoadViewWith:YES]; //添加数据的时候,实现延迟效果有两个方法 方法一、[self(performSelector:@selector(loadMoreData:)Withbject:nil afterDelay:2)]; 方法二、dispatch_after(dispath_time(DISPATCH_TIME_NOW,(int64_t)(2* NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [footerView showLoadViewWith:NO]; //添加的数据 GroupModel *model =[[GroupModel alloc]init]; model.title=@"江边一枝花"; model.icon=@"2c97690e72365e38e3e2a95b934b8dd2"; [self.dataArray addObject:model];
//刷新数据 #warning 当我选择单个刷新的时候,会报错,只能选择全部刷新 NSIndexPath *indexPath =[NSIndexPath indexPathForRow:self.dataArray.count -1 inSection:0]; /* [_tableview reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; */ [_tableview reloadData]; //滚动到最后一行 [_tableview scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:true]; });
|
请发表评论