A.需求
1.类似于微博内容的展示
2.头像
3.名字
4.会员标志
5.内容
6.分割线
7.配图(可选,可有可无)
 
code source: https://github.com/hellovoidworld/WeiboContentDemo
 
 
B.思路、步骤
1.Controller:UITableViewController
     改变控制器继承自UITableViewController,storyboard中也同时使用新的TableViewController,其TableView作为启动入口。
 
2.View:代码自定义cell
     使用代码组装每个cell,动态改变控件的位置、尺寸
     cell含有一个WeiboFrame类型的成员属性用来保存数据、位置尺寸
 
3.Model:
(1)Weibo:数据模型
     保存了每条微博的数据
 
(2)WeiboFrame:frame模型
     保存了一个Weibo的成员属性,和每个控件的位置尺寸,还有这个cell的高度
 
 
 
C.实现点
 
1.使用UITableViewController作为控制器和UITableView为起始入口
内置了UITableView成员,默认代理和dataSource就是UITableViewController
self.view == self.tableView
—>使当前的controller继承UITableViewController,然后指定view的class, Xcode就会自动配置
 
(1)继承UITableViewController
 //
// ViewController.h
// Weibo
//
// Created by hellovoidworld on 14/12/4.
// Copyright (c) 2014年 hellovoidworld. All rights reserved.
// #import <UIKit/UIKit.h> // 指定控制器继承自UITableViewController
@interface ViewController : UITableViewController @end
 
(2)在界面设计处删除原来的UIViewController
(3)拖入一个新的UITableViewController
 
(4)配置class
 
(5)设置UITableViewController为Entry Point
 
 
(5)Xcode会自动配置dataSource和delegate
 
 
2.自定义cell(cell内的子控件不固定)
不使用xib,使用代码
  • 新建一个继承自UITableViewCell的类
  • 先在cell的构造方法initWithStyle:reuseIndentifier:中添加所有需要显示的子控件(不需要设置frame和数据)
  • 在头文件提供一个model属性
  • 重写model属性的setter,在这个方法中设置view和frame的数据
 
1.通过xib自定义cell
* 添加tableView
* 加载团购数据
* 新建xib,获取子控件
* 封装
* 最后引入headerView和footerView(插入广告,加载更多)

2.通过代码自定义cell

* 引入UITableViewController
* 加载模型数据Weibo,用自带的cell展示基本数据
* 新建一个WeiboCell,封装模型数据
* 在init方法中添加4个子控件
* 在set方法中给子控件设置数据
* 在set方法中给子控件计算frame
* 说明cell的高度无法计算
* 设计WeiboFrame
* 建立Weibo、WeboFrame、WeiboCell的关系(提醒属性名不能叫做frame)
* 性能优化(存储WeiboFrame数据,不存储Weibo数据)
 
 
3.frame模型
设置cell中各个子控件的frame:
在之前的cell中持有的weibo模型引用的setter中分为两部分:设置view数据和设置frame
(1)创建间距变量
(2)第一行:头像、昵称,使用间距来设置合适的位置
(3)计算昵称的size,传入最大size,字体,用来计算昵称的frame的高度和宽度
—>创建一个方法来处理一段文字的size
(4)设置会员图标
(5)计算正文尺寸
     a.计算其size用来计算其frame;
 // 使用自带方法计算一段文字占用的size
- (CGSize) calTextSizeWithText:(NSString *) text font:(UIFont *) font maxSize:(CGSize) maxSize {
NSDictionary *attrs = @{NSFontAttributeName : font}; return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;
}
     b.设置自动换行;
        textView.numberOfLines = 0;// 设置自动换行
(6)如带有配图,设置配图的尺寸,计算位置
(7)计算cell的高度,有配图的从配图算起,没有配图就从博文算起
 

[iOS基础控件 - 6.7] 微博展示 使用代码自定义TableCell(动态尺寸)的更多相关文章

  1. [iOS基础控件 - 6.6.1] 展示团购数据代码

      1.主控制器: // // ViewController.m // GroupPurchase // // Created by hellovoidworld on 14/12/3. // Cop ...

  2. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  3. [iOS基础控件 - 6.7.1] 微博展示 代码

      Controller: // // ViewController.m // Weibo // // Created by hellovoidworld on 14/12/4. // Copyrig ...

  4. [iOS基础控件 - 6.6] 展示团购数据 自定义TableViewCell

    A.需求 1.头部广告 2.自定义cell:含有图片.名称.购买数量.价格 3.使用xib设计自定义cell,自定义cell继承自UITableViewCell 4.尾部“加载更多按钮”,以及其被点击 ...

  5. [iOS基础控件 - 6.9] 聊天界面Demo

    A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话 ...

  6. iOS 基础控件(下)

    上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知 ...

  7. [iOS基础控件 - 7.0] UIWebView

    A.基本使用 1.概念 iOS内置的浏览器控件 Safari浏览器就是通过UIWebView实现的   2.用途:制作简易浏览器 (1)基本请求 创建请求 加载请求 (2)代理监听webView加载, ...

  8. [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储

    A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改)   这个代码 ...

  9. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo

    A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用   B.实现步骤 1.准备plist文件和国旗图片     2.创建模型 // // Flag.h // Co ...

随机推荐

  1. linux查看历史命令history

    在linux下,我们有可能需要查看最近执行过的命令(历史命令),我们可以进行如下操作: # 显示使用过的所有历史命令 $ history # 显示最近使用的5个命令 $ history 5 我们可以通 ...

  2. [itint5]合并K个有序链表

    merge sort,leet code里面曾经做过.但一开始没这么写,遍历来做,效率n*k了,用了merge sort后,变成logn*k. 用了dummy node.同时要注意size为0的情况. ...

  3. java 用JNA方法调用C++动态链接库

    JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架.非常强大.易用,功能上类似与.NET的P/Invoke.你只 ...

  4. AD15高版软件卡不卡,问题解决大讨论

    AD高版软件很卡(包括13 14 15版),这是我遇到过的问题,大家都遇到过的问题, 这里我分享一个解决办法:也请给位有什么好的方法也一起分享. 问题1卡:打开AD15软件, 按住鼠标中键 放大 或 ...

  5. QT的QWidget和Delphi的TPanel很像,都是万能的基础控件

    都只提供了最基本的功能,实际可以在上面随心所欲的创造新的控件.而自身也已经拥有基础的显示功能,而TCustomControl就不行. 比如,这样使用QWidget,直接就可以显示: void Main ...

  6. Centos后台运行jar

    jar后台运行 nohup java -jar xx.jar >/dev/null & 此处的">/dev/null"作用是将终端输出信息输出到空洞中,即不保存 ...

  7. python学习笔记七--数据操作符的优先级

    一.混合表达式哪个部分先计算: 1. 取决于操作符的优先级,不同操作符的优先级是不一样的,例如‘*’的优先级高于‘+’ 2. 上节的表格里越靠后,优先级越高. 3 . 同一表达式的相同操作符是按从左到 ...

  8. 摄像头(4)用Camera和SurfaceView自定义拍照程序

    定制拍照程序的基本步骤 1,打开照相机:Camera.open 这是独占方式打开的 2,创建SurfaceView对象 多缓冲,多线程view 3,添加回调事件监听器(SurfaceHolder.ad ...

  9. python操作Excel读--使用xlrd

    一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 二.使用介绍 1.导入模块 import x ...

  10. 关于 tomcat 集群中 session 共享的三种方法

    前两种均需要使用 memcached 或redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单 ...