zoukankan      html  css  js  c++  java
  • 自定义 UITableViewCell

    自定义Cell当然很简单,subclass UITableViewCell,分2种,一种自己定义Nib文件,一种不使用Nib文件:

    当然依照个人选择,我喜欢少写代码,使用Nib文件。

    1. 添加文件继承自 UITableViewCell。

    2. 使用Nib文件。添加User Interface -> View 文件,IB拖拽一个TableViewCell控件(删除原来的View)。

    3. 对自定义的Cell进行自定义,当然像你设计的那样的设计。

    4. 这里我主要说在 UITableView的delegate方法中的使用

    1)不使用nib文件,当然很简单了

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"XXXCell"];
        if (cell == nil) {
            cell = [[ActivityCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
    
        return cell;
    }
    

    2)使用Nib文件

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";
        
        ActivityCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            
            NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"XXXCell" owner:nil options:nil];
            
            for (UIView *view in views) {
                if([view isKindOfClass:[UITableViewCell class]])
                {
                    cell = (XXXCell*)view;
                }
            }
        }
        
        return cell;
    }
    

     好了,其实这里我们已经完成了,但是看这个cellForRow中的代码有点多,还有循环,乱糟糟,那就拿出去吧!(使用Nib文件的情况下)

    1 .h 文件

    #import <UIKit/UIKit.h>
    
    @interface XXXCell : UITableViewCell {
    }
    
    + (BBCell *)cellFromNibNamed:(NSString *)nibName;
    
    @end
    

     2 .m文件

    #import "XXXCell.h"
    
    @implementation BBCell
    
    + (BBCell *)cellFromNibNamed:(NSString *)nibName {
        NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:NULL];
        NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
        XXXCell *customCell = nil;
        NSObject* nibItem = nil;
        while ((nibItem = [nibEnumerator nextObject]) != nil) {
            if ([nibItem isKindOfClass:[XXXCell class]]) {
                customCell = (XXXCell *)nibItem;
                break; 
            }
        }
        return customCell;
    }
    
    @end
    

     3. 使用,在代理方法中

    cell = [[[XXXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"XXXCell"] autorelease];
    

     替换

    cell = (XXXDetailCell *)[XXXCell cellFromNibNamed:@"XXXCell"];
    

      就这样,当然如果你愿意还可以重载更多方法来完成更伟大的功能!

  • 相关阅读:
    tree
    单向链表反转
    libev使用方法
    PowerManagerService流程分析
    Android source code compile error: “Try increasing heap size with java option '-Xmx<size>'”
    解决git合并冲突问题
    python之字典
    Django----admin管理工具
    流程控制,以及字符串
    python入门
  • 原文地址:https://www.cnblogs.com/iosdev/p/2855673.html
Copyright © 2011-2022 走看看