文档章节

ios uitableview加入uiscrollview广告栏

kobeli
 kobeli
发布于 2013/11/25 14:55
字数 655
阅读 4029
收藏 10

首先看下效果图

最外层是一个uitableview,广告栏是一个uiscrollview,之前做过类似的例子,是在构造cell的方法

cellForRowAtIndexPath中判断行数再添加uiscrollview,但是觉得代码不够整洁,总之是怎么看怎么不爽,于是决定尝试用uitableview head来解决,既然要用到head,那肯定就是要自定义一个view了

以下是view的h文件

@interface AdvertHeaderView : UIView<UIScrollViewDelegate>{

   int TimeNum;

    BOOL Tend;

    NSArray *imageArray;


}


@property (retain, nonatomicUIScrollView *sv;

@property (retain, nonatomicUIPageControl *PageControl;



- (void)configAdvert:(NSArray *) imgArray;

-(void)configUserInterface;

@end

以下是view的m文件

//

//  AdvertHeaderView.m

//  SUNCommonComponent

//

//  Created by kobeli on 13-11-25.

//  Copyright (c) 2013 中山市新联医疗科技有限公司. All rights reserved.

//


#import "AdvertHeaderView.h"


@implementation AdvertHeaderView


- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        // Initialization code

        imageArray =自己定义一个装载图片地址的数组


        [self configUserInterface];

        [self configAdvert:imageArray];

        

    }

    return self;

}




-(void)configAdvert:(NSArray *)imgArray

{

    

    [self AdImg:imgArray];

    [self setCurrentPage:_PageControl.currentPage];

    

}

-(void)configUserInterface{


    _sv=[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 144)];

    _sv.delegate=self;

    _sv.showsHorizontalScrollIndicator=NO;

    _sv.showsVerticalScrollIndicator=NO;

    _sv.pagingEnabled=YES;

    [self addSubview:_sv ];

    

    _PageControl=[[UIPageControl alloc]initWithFrame:CGRectMake(320/2-15, _sv.frame.size.height-23 , 30, 30)];

    [self addSubview:_PageControl ];

    

   


}

-(void)AdImg:(NSArray*)arr{

    [_sv setContentSize:CGSizeMake(320*[arr count], 144)];

    _PageControl.numberOfPages=[arr count];

    

    for ( int i=0; i<[arr count]; i++) {

        NSString *url=[arr objectAtIndex:i];

        UIButton *img=[[UIButton alloc]initWithFrame:CGRectMake(320*i, 0, 320, 144)];

        // [img addTarget:self action:@selector(Action) forControlEvents:UIControlEventTouchUpInside];

        [_sv addSubview:img];

        //[img setImage:[UIImage imageNamed:@"jiazai_test@2x.png"] forState:UIControlStateNormal];

        UIImageFromURL( [NSURL URLWithString:url], ^( UIImage * image )

                       {

                           [img setBackgroundImage:image forState:UIControlStateNormal];

                       }, ^(void){

                       });

    }

    

}


void UIImageFromURL( NSURL * URL, void (^imageBlock)(UIImage * image), void (^errorBlock)(void) )

{

    dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^(void)

                   {

                       NSData * data = [[NSData alloc] initWithContentsOfURL:URL] ;

                       UIImage * image = [[UIImage alloc] initWithData:data];

                       dispatch_async( dispatch_get_main_queue(), ^(void){

                           if( image != nil )

                           {

                               imageBlock( image );

                           } else {

                               errorBlock();

                           }

                       });

                   });

}

#pragma mark - 5秒换图片

- (void) handleTimer: (NSTimer *) timer

{

    if (TimeNum % 5 == 0 ) {

        

        if (!Tend) {

            _PageControl.currentPage++;

            if (_PageControl.currentPage==_PageControl.numberOfPages-1) {

                Tend=YES;

            }

        }else{

            _PageControl.currentPage--;

            if (_PageControl.currentPage==0) {

                Tend=NO;

            }

        }

        

        [UIView animateWithDuration:0.8 //速度0.7

                         animations:^{//修改坐标

                             _sv.contentOffset = CGPointMake(_PageControl.currentPage*320,0);

                         }];

        

        

    }

    TimeNum ++;

}


#pragma mark - scrollView && page

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    NSLog(@"我滑动了");

    _PageControl.currentPage=scrollView.contentOffset.x/320;

    [self setCurrentPage:_PageControl.currentPage];

    

    

}

- (void) setCurrentPage:(NSInteger)secondPage {

    

    for (NSUInteger subviewIndex = 0; subviewIndex < [_PageControl.subviews count]; subviewIndex++) {

        UIImageView* subview = [_PageControl.subviews objectAtIndex:subviewIndex];

        //这里犯了一个小错误,如果不加类型判断的话会报错找不到setimage方法的错,所以一定要

           判断是uiview还是uiimageview

        if ([subview isKindOfClass:[UIImageView class]]) {

            CGSize size;

            size.height = 12/2;

            size.width = 12/2;

            [subview setFrame:CGRectMake(subview.frame.origin.x, subview.frame.origin.y,

                                         size.width,size.height)];

            if (subviewIndex == secondPage)

                [subview setImage:[UIImage imageNamed:@"a.png"]];

            else

                [subview setImage:[UIImage imageNamed:@"d.png"]];

        }

        

    

    }

}


@end

uiview定义好了,就开始放进我们的uitableview里面去了,

可以使用

//头标签高度设置

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

{

    CGFloat f=144;

    return   f;

}

//头标签设置,返回自定义的uiview

-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

{

    AdvertHeaderView *advertHeaderView=[[AdvertHeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 144)];

    return advertHeaderView;

}

这种方法,广告栏view会停留在页面上,不会随uitableview滚动

如果要其随其它cell滚动,可以这样设置

 self.tableViewList.tableHeaderView=advertHeaderView;

这样就大功告成,去试试吧


© 著作权归作者所有

共有 人打赏支持
kobeli
粉丝 5
博文 7
码字总数 1991
作品 0
武汉
程序员
私信 提问
加载中

评论(1)

陆霏霏
陆霏霏
感激不尽,解决了大问题了。。。
iOS开发tips-神奇的UITableView

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/71436920 概述 UITableView是iOS开发中使用频率最高的UI控件,在前面的文章中对于...

KenshinCui
2017/05/08
0
0
iOS开发小技巧:刷新UITableView

在很多APP界面都用到的UITableView,对iOS开发者来说一定不陌生吧。网上关于UITableView的文章早已多不胜数,尤其是关于UITableView优化方面的,对开发者来说非常值得一看。 现在就来看看,刷...

flyurt
2015/10/23
1K
0
UI_09 UITableView(表视图)

⼀、表视图 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView。UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳 1、表示图的样式 UITableViewStylePlain UITa...

黑伞将军
2015/08/26
0
0
iOS开发tips-UITableView、UICollectionView行高/尺寸自适应

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/55002487 UITableView 我们都知道UITableView从iOS 8开始实现行高的自适应相对比...

KenshinCui
2017/02/12
0
0
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx 找不到pid文件原因及解决办法

2.var/run/nginx.pid文件 首先 var/run这个目录是干嘛用的? 此文件夹包含描述系统启动以来系统信息的数据。此文件夹下的文件必须在启动过程初期清除(删除或归零)。程序可以在/var/run下有...

李佳顺
41分钟前
4
0
【scala】2.控制结构和函数

简介 在Java或者C++中,我们把表达式和语句看做两种不同的东西。表达式有值,而语句执行动作。 在Scala中,几乎所有构造出来的语法结构都是有值的。这个特性使得程序更加的精简,也更易读。 ...

Areya
44分钟前
3
0
Java中的并发工具类(CountDownLatch、CyclicBarrie、Exchanger)

在JDK的并发包里提供了很多有意思的并发工具类。CountDownLatch、CyclicBarrier和Semaphore 工具类提供了一种并发流程控制的手段,Exchanger 工具类则提供了在线程间交换数据的一种手段。 1....

孟飞阳
49分钟前
0
0
Docker之推送镜像到Harbor

安装Harbor之类的在这里就不讲了,请看我的这篇博客 1、在Harbor上创建用户 如下图1.1所示,"Users"->"NEW USER",之后会弹出一个输入框,输入用户名、密码之类的,这个后面会用到 图1.1 2...

克虏伯
今天
3
0
JVM-----java内存区域与java内存模型

一.java内存区域 jvm在执行java程序的过程中会把所管理的内存分为若干不同的区域,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁的。 以下是java运...

Carol998
今天
4
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部