文档章节

仿QQ空间用一个tableview显示多种自定义cell

不孤独的美食家
 不孤独的美食家
发布于 2015/10/17 19:27
字数 990
阅读 3883
收藏 10
点赞 4
评论 1

                                                      第一部分 要实现效果

先来看看真实QQ空间的效果吧:

从这张截图中,可以看到两种自定义的cell,其实在QQ空间的我的空间中有三种自定义的cell,那么这就是我们要实现的效果。

                                       第二部分 实现的思路

第一步(由于没有数据源,我们只好操作plist文件):

创建我们所需要的plist文件,如下图:

这是表格样式三所需的plist文件

这是我们表格样式一所需的plist文件

这是表格样式二所需要的文件


第二步 有了素材文件之后,就好办了,我们需要把它解析出来,由于这些plist文件都是以数组形式包装的,所以在解析出来的时候,我们要用数组给他们保存起来,所以我们在头文件中声明了这三个数组

第三步 加载并保存plist文件

第四步 控制器成为表格的代理和数据源,并实现数据源相应的方法


第五步  实现表格的返回section的分区数的这个方法,这个很重要,也是实现我们今天的这个效果的关键部分之一

由于我们需要实现三个自定义的cell,所以在这里返回3就行了,如果你想返回很多个分区,你在这里写上你想要的分区数就行了

第六步 返回每个分区表格的行数,由于有三个分区,需要作相应的判断,方法如下

第七步  返回每个分区中表格中每行返回的要显示的cell

第八步 返回分区中每行表格需要显示的行高,不要忘了这个方法哦,不然表格不会正常的显示出来,而是显示默认的44的高度

                                       第三部分 程序实现的效果

好了,思路大概就是那样的了,现在来看看我们的结果吧


                                            第四部分  源码

为了方便大家学习,我把源码复制上来

//  多样式的表格

//

//  Created by 妖精的尾巴 on 15-10-16.

//  Copyright (c) 2015 妖精的尾巴. All rights reserved.

//


#import "ViewController.h"

#import "LHZoneCell.h"

#import "mySpaceCell.h"

#import "gameCell.h"


@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>


/**

 *存储qqZoneDataplist的文件数组

 */

@property(nonatomic,strong)NSArray* plistDataArray;

/**

 *存储mySpaceplist的文件数组

 */

@property(nonatomic,strong)NSArray* plistArray;

/**

 *存储playPlist的文件数组

 */

@property(nonatomic,strong)NSArray* playArray;



@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    [self createTable];

    [self loadPlistData];

}


-(void)loadPlistData

{

    NSString* pathFile=[[NSBundle mainBundle]pathForResource:@"qqZoneData.plist" ofType:nil];

    self.plistDataArray=[NSArray arrayWithContentsOfFile:pathFile];

    

    NSString* path=[[NSBundle mainBundle]pathForResource:@"mySpace.plist" ofType:nil];

    self.plistArray=[NSArray arrayWithContentsOfFile:path];

    

    NSString* pFile=[[NSBundle mainBundle]pathForResource:@"play.plist" ofType:nil];

    self.playArray=[NSArray arrayWithContentsOfFile:pFile];

}


-(void)createTable

{

    UITableView* tableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStyleGrouped];

    tableView.delegate=self;

    tableView.dataSource=self;

    [self.view addSubview:tableView];

}


#pragma mark - 表格数据源方法


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{


    return 3;

}


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    

    if (section == 0) {

        return self.plistArray.count;

    }else if(section==1){

        return self.plistDataArray.count;

    }else{

        return self.playArray.count;

    }

}


-(UITableViewCell* )tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    if (indexPath.section == 0) {

     NSString* cellw=@"c";

     mySpaceCell* cell=[tableView dequeueReusableCellWithIdentifier:cellw];

     if (cell==nil)

     {

     cell=[[[NSBundle mainBundle]loadNibNamed:@"mySpaceCell" owner:nil options:nil] lastObject];

     }

     NSDictionary* dict=self.plistArray[indexPath.row];

     cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;

     cell.icon.image=[UIImage imageNamed:dict[@"icon"]];

     cell.visitorFriendIcon.image=[UIImage imageNamed:dict[@"visitorFriendIcon"]];

     cell.visitorLabel.text=dict[@"visitorLabel"];

     cell.friendName.text=dict[@"friendName"];

        return cell;

    }

    else if (indexPath.section==1){

        NSString* celle=@"cell";

        LHZoneCell* cell=[tableView dequeueReusableCellWithIdentifier:celle];

        if (cell==nil)

        {

            cell=[[[NSBundle mainBundle]loadNibNamed:@"LHZoneCell" owner:nil options:nil] lastObject];

        }

        NSDictionary* dict=self.plistDataArray[indexPath.row];

        cell.userIcon.image=[UIImage imageNamed:dict[@"userIcon"]];

        cell.usernickName.text=dict[@"userName"];

        cell.userPubulishTime.text=dict[@"userPubulishTime"];

        cell.userContentLabel.text=dict[@"userContentlabel"];

        cell.userbrowseLabel.text=dict[@"userbrowseLabel"];

        cell.userPhoneSource.text=dict[@"userPhoneSource"];

        cell.userAppreciateNumbers.text=dict[@"userAppreciateNumbers"];

        cell.userContentImage.image=[UIImage imageNamed:dict[@"userContentImage"]];

        return cell;

    }

    NSString* cellID=@"cell";

    gameCell* cell=[tableView dequeueReusableCellWithIdentifier:cellID];

    if (cell==nil) {

        cell=[[[NSBundle mainBundle]loadNibNamed:@"gameCell" owner:nil options:nil] lastObject];

    }

    NSDictionary* dict=self.playArray[indexPath.row];

    cell.gameIcon.image=[UIImage imageNamed:dict[@"image"]];

    cell.gameCount.text=dict[@"peopleCount"];

    cell.gameTitle.text=dict[@"title"];

    cell.gameType.text=dict[@"type"];

    return cell;

    

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

    //第三组的高度

    if (indexPath.section == 2) {

        return 92;

    }

    else if (indexPath.section==1){

        return 320;

    }

    else{

    //第一组的高度

        return 50;

    }

}

@end



© 著作权归作者所有

共有 人打赏支持
不孤独的美食家
粉丝 90
博文 159
码字总数 48705
作品 1
长沙
高级程序员
加载中

评论(1)

天卦师包包
天卦师包包
妹子真漂亮!
iOS-常用的自定义控件

前言 项目中比较可能会用到的自定义控件,也会去参考别人的第三方,解读他们解决问题的思路并加上自己的逻辑,记录下来方便以后阅读; (一)图文验证码; demo展示的是简单的图文验证(没有...

麦兜卖鱼丸 ⋅ 2016/10/18 ⋅ 0

iOS UITableView代理方法详解

iOS UITableView的代理方法详解 一、补充 在上一篇博客中,http://my.oschina.net/u/2340880/blog/404605,我将IOS中tableView(表视图)的一些常用方法总结了一下,这篇将tableView的代理方法...

珲少 ⋅ 2015/04/22 ⋅ 2

iOS开发技巧(系列十:UITableView及其Cell的一些细节)

今天看开源代码,有些UITableView方面细节的东西,整理了与大家共享, 1、设置UITableViewCell的accessoryView 有时候我们需要设置cell的一些样式,比如下图, 这个就是设置了cell的accesso...

召唤攻城狮 ⋅ 2014/05/09 ⋅ 0

从零开始,直到···

温馨提示: 开续篇了 点击进入续篇 点击进入续篇 点击进入续篇 ( 43 ) 释放/销毁 //释放所有子控件 [<#控件#>.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; ( 42 ...

阴雨音语 ⋅ 2016/01/20 ⋅ 0

tableview的多个类型自定义cell的数据重用解决方案

UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件。上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入UIT...

奋斗的青春年华 ⋅ 2016/12/22 ⋅ 0

高仿 QQ 空间--lh_Qzone

不孤独的美食家 ⋅ 2015/11/03 ⋅ 0

iOS开发系列--UITableView全面解析

--UIKit之UITableView 概述 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信、QQ、新浪微博等软件基本上随处都是UITableView。当...

jianxin160 ⋅ 2015/08/18 ⋅ 0

UITableView-的cell 自定义(高度and样式)

UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格。通常,UITableView中的Cell是动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即tableView:heightF...

谁家的阿毛 ⋅ 2014/05/12 ⋅ 0

UITableView 的更多属性

UITableView的初始化 [csharp] UITableView tableview= [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [tableview setDelegate:self]; [tableview setDataSource:self]......

meilidashijie ⋅ 2013/01/04 ⋅ 1

TableViewCell 复用问题 设置 frame 的正确姿势

UITableViewCell 是 UITableView 的一个小单元,使用非常频繁,原来我在 [iOS学习之UITableView(一): 新手篇创建tableView][1] 中也讲解过 UITableViewCell 的使用,但是还有一些东西没有讲到...

芳仔小脚丫 ⋅ 2016/12/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

oAuth2 升级Spring Cloud Finchley.RELEASE踩坑分享

背景 6.19号,spring团队发布了期待已久的 Spring Cloud Finchley.RELEASE 版本。 重要变化: 基于Spring Boot 2.0.X 不兼容 Spring Boot 1.5.X 期间踩过几个坑,分享出来给大伙,主要是关于...

冷冷gg ⋅ 40分钟前 ⋅ 0

OSChina 周一乱弹 —— 理发师小姐姐的魔法

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @冰冰棒- :分享田馥甄的单曲《My Love》 《My Love》- 田馥甄 手机党少年们想听歌,请使劲儿戳(这里) @Li-Wang :哎,头发又长了。。。又要...

小小编辑 ⋅ 今天 ⋅ 4

Kafka1.0.X_消费者API详解2

偏移量由消费者管理 kafka Consumer Api还提供了自己存储offset的功能,将offset和data做到原子性,可以让消费具有Exactly Once 的语义,比kafka默认的At-least Once更强大 消费者从指定分区...

特拉仔 ⋅ 今天 ⋅ 0

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部