XIB自定义uitableviewCell管理多个uitableviewCell控件

xib自定义uitableviewCell很方便,而且xcode6的sizeClass同样适用XIB适配就轻松不少;

但是,如果一个tableview有多个自定义的cell样式,难道一个cell样式建一个XIB文件?

  1. 绘制cell样式;
  2. 为每个样式添加标识符和申明所属类;
  3. 尤其注意左边的标识符顺序,因为这表示的是bundle返回的资源数组的下标,拖动无法修改顺序;
  4. 添加Cell初始化方法
  5. +(UITableViewCellAddTravelRequest*)InitUITableViewCellAddTravelRequestAndIdentifier:(NSString*)nsStringIdentifier
    {
    if ([nsStringIdentifier isEqualToString:@"identifier0"])
    {
    return [[[NSBundle mainBundle] loadNibNamed:@"UITableViewCellAddTravelRequest"
    owner:self
    options:nil] objectAtIndex:0];
    }
    else if ([nsStringIdentifier isEqualToString:@"identifier1"])
    {
    return [[[NSBundle mainBundle] loadNibNamed:@"UITableViewCellAddTravelRequest"
    owner:self
    options:nil] objectAtIndex:1];

    }
    else if ([nsStringIdentifier isEqualToString:@"identifier2"])
    {
    return [[[NSBundle mainBundle] loadNibNamed:@"UITableViewCellAddTravelRequest"
    owner:self
    options:nil] objectAtIndex:2];

    }
    else if ([nsStringIdentifier isEqualToString:@"identifier3"])
    {
    return [[[NSBundle mainBundle] loadNibNamed:@"UITableViewCellAddTravelRequest"
    owner:self
    options:nil] objectAtIndex:3];

    }

    return 0;

    }

  6. 红色部分就是bundle返回的资源数组的下标使用;
  7. 然后就是cell创建的代理方法,因为知道什么位置放什么样式所以数组就写死了,如果不定的话需要在为空的条件下创建默认的一种样式然后再修改样式否则的话会因为cell返回为空carsh掉;
  8. -(UITableViewCell*)tableView:(UITableView *)tableView
    cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    tableView.tableFooterView=[[UIView alloc] initWithFrame:CGRectZero];

    static NSString* nsStringIdent[email protected]"identifier0";
    static NSString* [email protected]"identifier1";
    static NSString* [email protected]"identifier2";
    static NSString* [email protected]"identifier3";

    UITableViewCellAddTravelRequest* uiTableViewCellAddTravelRequest;

    NSArray* [email protected][[NSIndexPath indexPathForRow:0 inSection:0],
    [NSIndexPath indexPathForRow:1 inSection:0]];

    NSArray* [email protected][[NSIndexPath indexPathForRow:2 inSection:0],
    [NSIndexPath indexPathForRow:3 inSection:0]];

    NSArray* [email protected][[NSIndexPath indexPathForRow:4 inSection:0]];

    NSArray* [email protected][[NSIndexPath indexPathForRow:0 inSection:1]];

    //先从重用队列查找 没有则创建
    for (NSIndexPath* nsindexPath in nsArrayidentifier0)
    {
    if ([indexPath isEqual:nsindexPath])
    {
    uiTableViewCellAddTravelRequest= [tableView dequeueReusableCellWithIdentifier:nsStringIdentifier0];
    }
    }
    for (NSIndexPath* nsindexPath in nsArrayidentifier1)
    {
    if ([indexPath isEqual:nsindexPath])
    {
    uiTableViewCellAddTravelRequest= [tableView dequeueReusableCellWithIdentifier:nsStringIdentifier1];
    }
    }
    for (NSIndexPath* nsindexPath in nsArrayidentifier2)
    {
    if ([indexPath isEqual:nsindexPath])
    {
    uiTableViewCellAddTravelRequest= [tableView dequeueReusableCellWithIdentifier:nsStringIdentifier2];
    }
    }
    for (NSIndexPath* nsindexPath in nsArrayidentifier3)
    {
    if ([indexPath isEqual:nsindexPath])
    {
    uiTableViewCellAddTravelRequest= [tableView dequeueReusableCellWithIdentifier:nsStringIdentifier3];
    }
    }

    if (uiTableViewCellAddTravelRequest==nil)
    {

    for (NSIndexPath* nsindexPath in nsArrayidentifier0)
    {
    if ([indexPath isEqual:nsindexPath])
    {
    uiTableViewCellAddTravelRequest=[UITableViewCellAddTravelRequest InitUITableViewCellAddTravelRequestAndIdentifier:@"identifier1"];
    uiTableViewCellAddTravelRequest.uiLabelLocation.text=(nsArraySectionRow[indexPath.section])[indexPath.row];
    }
    }
    for (NSIndexPath* nsindexPath in nsArrayidentifier1)
    {
    if ([indexPath isEqual:nsindexPath])
    {
    uiTableViewCellAddTravelRequest=[UITableViewCellAddTravelRequest InitUITableViewCellAddTravelRequestAndIdentifier:@"identifier0"];
    uiTableViewCellAddTravelRequest.uiLabelDate.text=(nsArraySectionRow[indexPath.section])[indexPath.row];

    }
    }
    for (NSIndexPath* nsindexPath in nsArrayidentifier2)
    {
    if ([indexPath isEqual:nsindexPath])
    {
    uiTableViewCellAddTravelRequest=[UITableViewCellAddTravelRequest InitUITableViewCellAddTravelRequestAndIdentifier:@"identifier2"];

    }
    }
    for (NSIndexPath* nsindexPath in nsArrayidentifier3)
    {
    if ([indexPath isEqual:nsindexPath])
    {
    uiTableViewCellAddTravelRequest=[UITableViewCellAddTravelRequest InitUITableViewCellAddTravelRequestAndIdentifier:@"identifier3"];

    }
    }

    }

    return uiTableViewCellAddTravelRequest;
    }

  9. 最终效果如下,这样如果再有新的样式也很好处理了;
时间: 2024-10-05 10:43:22

XIB自定义uitableviewCell管理多个uitableviewCell控件的相关文章

集成自动化的条形码功能到internet应用程序,网站或自定义Java应用程序的条码控件Java Barcode Package

Java Barcode Package控件是一款条码生成控件,包含所有的JavaBean,Applets,Servlets和类库可以使用于装有Java虚拟机的任何平台,包括Windows?, Linux, MacOS, Unix, Solaris, HP/UX, AS/400 和OS/390,用于集成自动化的条形码功能到internet应用程序,网站或自定义Java应用程序. 具体功能: 可在任何装有Java虚拟机的操作系统上生成条形码. 此产品的开发者授权是永久的且免收版权费用的. 支持ID

用于后台管理的列表数据控件:DataGrid和Select

常听人说不喜欢javascript.然而我一个一直用C#做后端的人,最喜欢的编程语言就是javascript了,我接收它的优点,也接收它的缺点! 前段时间接触过easyui,用过里面的DataGrid和Combobox等控件,感觉DataGrid的确减少了一些重复的工作,但是easyui改变原有的Element,比如textbox,不能用$("#id").val()获取值了,只能用$(“#id”).textbox('getValue')来获取,不喜欢这样.国庆放假,票到3号了,今天有时

Android 自定义View 三板斧之一——组合现有控件

通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 上文说过了如何继承现有控件来自定义控件,这节我们来讨论第二个议题.怎么将控件组合来实现一个功能强大的自定义控件. 先看看创建组合控件的好处吧,创建组合控件能够很好的创建具有组合功能的控件集合.那我们一般又是怎么做的了,一般我们来继承一个合适的ViewGroup,再为他创建一个新功能,从而就形成了一个新功能的控件.我们还

iOS开发系列之常用自定义控件开发集—自定义单选按钮或者多选按钮控件开发

在我们实际开发中我们做登陆或者注册功能时往往需要勾选某个协议这个时候就需要用到CheckBox按钮,CheckBox是pc或者android上得控件ios没有,所以需要我们自定义. WHC_RadioButton.h头文件如下: // // WHC_RadioButton.h // CTBMobileBank // // Created by 吴海超 on 15/4/1. // // #import <UIKit/UIKit.h> #define KWHC_IMAGE_SIZE (15.0)

ASP.NET自定义Web服务器控件-DropDownList/Select下拉列表控件

using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; //自定义web服务器控件-下拉列表 namespace MyControls { [DefaultProperty("Tex

Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)

在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着不重复发明轮子的原则).于是我就在 GitHub 上找寻.确实找到了不少,但是与需求之间的差距还比较大.从零开始写又不太现实(时间摆在那里,加之自己的前端也是刚学,还没有从零开始手撸一个控件的能力),所以在已有组件的基础上进行二次封装便成了一个比较可行的方法(几乎也是唯一解).遂在 npm 上以 c

Android开发:自定义银行app的最大额度控件

详解 前几天看到掌上生活上一个好玩的最大额度提示的页面,作为程序员的我,不能光看别人做的效果,于是自己也撸了一个差不多的额度控件了. 掌上生活效果: 今天就是这么个玩意是个主角了.好了,下面也来看看咋们要实现的结果: 使用: xml: <com.xiangcheng.amount.AmountView android:id="@+id/amount_view" android:layout_width="wrap_content" android:layout

xib自定义UIView报错误 &quot;forUndefinedKey:]: this class is not key value coding-compliant for the key&quot;

使用xib自定义UIView的时候, 需要将控件拖拽成属性, 在viewController加载自定义view的时候报错误 "forUndefinedKey:]: this class is not key value coding-compliant for the key" 查找很久,终于发现是xib 的FILE'OWNER 的类关联出错 自定义View的时候  这个位置只能为空!!! xib关联类应该在view的Class设置,如图 修改了类的关联之后,错误解决.

ios--控件--自定义封装一个控件

感谢原作者的分享: http://blog.csdn.net/zhangao0086/article/details/45622875 前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内:而一个好的控件除了有对外一致的体验之外,还有其内在特征: 灵活性 低耦合 易拓展 易维护 通常特征之间需要做一些取舍,比如灵活性与耦合度,有时候接口越多越能适应各