zoukankan      html  css  js  c++  java
  • [iOS基础控件

    A.需求
    1.类似于微博内容的展示
    2.头像
    3.名字
    4.会员标志
    5.内容
    6.分割线
    7.配图(可选,可有可无)
     
    code source: https://github.com/hellovoidworld/WeiboContentDemo
     
    Image(99)
     
    B.思路、步骤
    1.Controller:UITableViewController
         改变控制器继承自UITableViewController,storyboard中也同时使用新的TableViewController,其TableView作为启动入口。
     
    2.View:代码自定义cell
         使用代码组装每个cell,动态改变控件的位置、尺寸
         cell含有一个WeiboFrame类型的成员属性用来保存数据、位置尺寸
     
    3.Model:
    (1)Weibo:数据模型
         保存了每条微博的数据
     
    (2)WeiboFrame:frame模型
         保存了一个Weibo的成员属性,和每个控件的位置尺寸,还有这个cell的高度
     
    Image(100)
     
     
    C.实现点
     
    1.使用UITableViewController作为控制器和UITableView为起始入口
    内置了UITableView成员,默认代理和dataSource就是UITableViewController
    self.view == self.tableView
    —>使当前的controller继承UITableViewController,然后指定view的class, Xcode就会自动配置
     
    (1)继承UITableViewController
     1 //
     2 //  ViewController.h
     3 //  Weibo
     4 //
     5 //  Created by hellovoidworld on 14/12/4.
     6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved.
     7 //
     8 
     9 #import <UIKit/UIKit.h>
    10 
    11 // 指定控制器继承自UITableViewController
    12 @interface ViewController : UITableViewController
    13 
    14 
    15 @end
     
    (2)在界面设计处删除原来的UIViewController
    (3)拖入一个新的UITableViewController
    Image(101)
     
    (4)配置class
    Image(102)
     
    (5)设置UITableViewController为Entry Point
    940F4326-CAE4-46B8-B8D5-67780024B391
     
     
    (5)Xcode会自动配置dataSource和delegate
    Image(103)
     
     
    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;
    1 // 使用自带方法计算一段文字占用的size
    2 - (CGSize) calTextSizeWithText:(NSString *) text font:(UIFont *) font maxSize:(CGSize) maxSize {
    3     NSDictionary *attrs = @{NSFontAttributeName : font};
    4    
    5     return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;
    6 }
         b.设置自动换行;
            textView.numberOfLines = 0;// 设置自动换行
    (6)如带有配图,设置配图的尺寸,计算位置
    (7)计算cell的高度,有配图的从配图算起,没有配图就从博文算起
     
  • 相关阅读:
    IEqualityComparer<T> 重写注意事项
    InfoPath使用Sharepoint Webservice之多参数
    强制使用office web Apps新建文档
    SQL 分组取每组第N行数据
    Sharepoint Ribbon 开启右键菜单(此文作废)
    sharepoint 2010 Infopath 备忘
    sharepoint windows认证模式下 限制人员选取器能访问OU
    Unable to load configuration异常处理
    Java数据库连接池的配置
    No Suitable Driver Found 解决方法
  • 原文地址:https://www.cnblogs.com/hellovoidworld/p/4147719.html
Copyright © 2011-2022 走看看