自定义UITableViewCell实现ibooks类似的图书列表形式

前几天实现iBooks类似的图书列表形式,share一下,效果如下。

实现关键代码原理:

1:创建UIt=TableView对象时,设置背景透明,分隔条透明

// 设置table的分割符透明
tbView.separatorColor = [UIColor clearColor];
// 设置table背景透明
tbView.backgroundColor = [UIColor clearColor];

2:在tableView:cellForRowAtIndexPath中绘制cell内容,展示图书。这里一个技巧是自定义一个UIButton,覆盖在图书图片上,相应点击事件。其中使用button的tag来保存table数组中的所在图书的下标。

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *identifier = @"etuancell";
	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
	if (!cell) {
		//cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier];
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

        [cell setAccessoryType:UITableViewCellAccessoryNone];
        // 取消选择模式
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }else{
        // 删除cell中的子对象,刷新覆盖问题。
        while ([cell.contentView.subviews lastObject] != nil) {
            [(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];
        }
    }
    // 定义图书大小
#define kCell_Items_Width 156
#define kCell_Items_Height 230
    // 设置图片大小206*306
    // 图片与图片之间距离为50
    // 每行3,4本图书
    CGFloat x = 80;
    CGFloat y = 40;

    NSInteger nowNum = kNum;
    if (bLandScape) {
        nowNum += 1;
    }

    NSInteger row = indexPath.row * nowNum;
    // 循环绘制出图书图片
    for (int i = 0; i<nowNum; ++i) {
        // 跳出循环
        if (row >= [data count]) {
            break;
        }

        // 展示图片
        UIImageView *bookView = [[UIImageView alloc] initWithFrame:CGRectMake(x, y, kCell_Items_Width, kCell_Items_Height)];
        NSString *bookName = [[NSString alloc] initWithFormat:@"book%d.png",row];
        bookView.image = [UIImage imageNamed:bookName];
        [cell.contentView addSubview:bookView];

        // 添加按钮
        UIButton *bookButton = [UIButton buttonWithType:UIButtonTypeCustom];
        bookButton.frame = CGRectMake(x, y, kCell_Items_Width, kCell_Items_Height);
        // 这里采用一个技巧,使用button的tag,记录tabledata中的序号
        bookButton.tag = row;
        [bookButton addTarget:self action:@selector(testButton:) forControlEvents:UIControlEventTouchUpInside];

        [cell.contentView addSubview:bookButton];

        x += (80+kCell_Items_Width);
        // row+1
        ++row;
    }
	return cell;
}

3:在tableView:numberOfRowInSection中,动态返回tableview的row数量,其中kNum为3

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    NSInteger count = ([data count]+kNum-1)/kNum;
    if (bLandScape) {
        count = ([data count]+kNum)/(kNum+1);
    }
    return count;
}

4:更多效果参考

源代码下载,点击这里 。如果您有任何问题或者疑问可以随时联系我。转发请注明http://blog.csdn.net/ugg

时间: 2024-11-08 19:09:32

自定义UITableViewCell实现ibooks类似的图书列表形式的相关文章

iOS App开发中使用及自定义UITableViewCell的教程_IOS

UITableView用来以表格的形式显示数据.关于UITableView,我们应该注意: (1)UITableView用来显示表格的可见部分,UITableViewCell用来显示表格的一行. (2)UITableView并不负责存储表格中的数据,而是仅仅存储足够的数据使得可以画出当前可见部分. (3)UITableView从UITableViewDelegate协议获取配置信息,从UITableViewDataSource协议获得数据信息. (4)所有的UITableView实现时实际上只有

SharePoint 2013 App开发中自定义网站栏,内容类型及列表

打开vs2012新建项目. 开发中自定义网站栏,内容类型及列表-sharepoint自定义列表"> 选择Sharepoint hosted模式. 一个app开发的项目就创建好了. 创建网站栏 1.右键项目>添 加>新建项>Site column 创建一个网站栏 2.在element.xml中添加以下 字段. <?xml version="1.0" encoding="utf-8"?> <Elements xmlns

如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码

问题描述 如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码 请问如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码 解决方案 http://etwo.iteye.com/blog/1460375

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

操作-VC++ 主窗口与子窗口ListCtrl传值(有文字有整数,列表形式)

问题描述 VC++ 主窗口与子窗口ListCtrl传值(有文字有整数,列表形式) 在主窗口(父窗口)类中定义一个数据成员,用于实时更新ListCtrl的内容,当执行添加或者删除操作时,对应着更新这个数据成员.执行查找操作时,将主窗口的这个数据成员的指针传递给查找窗口(子窗口)对应的类中(在查找类中定义一个对应类型的数据成员指针),那么取数据时直接用的主窗口的实时数据. 现在遇到相同的问题,有些不太明白,恳请大虾贴出上述方法的具体代码,谢谢啦! 解决方案 使用委托与事件,如果是使子窗体中的内容·随

下面的代码怎么换成ul、li列表形式。

问题描述 下面的代码怎么换成ul.li列表形式. <s:iterator value="List" status="st"> <s:if test="#st.odd"> <tr> </s:if> <td height="30" bgcolor="#FFFFFF"> <s:property value="pwd" />

SQL 把表中字段存储的逗号隔开内容转换成列表形式

原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ------>      从左边图转换成右边图,像这种需求,我们难免会遇到.      今天我写了个存储过程来解决这种问题.主要方式是利用master..spt_values表.       具体存储过程如下:        -- Author: LHM -- Create date: 2015-

Android 列表形式的切换的示例代码

电商项目中经常有这样的需求:在商品列表页面中,切换列表的展现形式,一般分为列表形式和表格形式. 如京东: 本文最终实现的效果: 关键词:RecyclerView 主布局文件:activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

全面解析iOS应用中自定义UITableViewCell的方法_IOS

有时候我们需要自己定义UITableViewCell的风格,其实就是向行中添加子视图.添加子视图的方法主要有两种:使用代码以及从.xib文件加载.当然后一种方法比较直观. 一.基本用法我们这次要自定义一个Cell,使得它像QQ好友列表的一行一样:左边是一张图片,图片的右边是三行标签: 当然,我们不会搞得这么复杂,只是有点意思就行. 1.运行Xcode 4.2,新建一个Single View Application,名称为Custom Cell: 2.将图片资源导入到工程.为此,我找了14张50×