Swift使用xib制作UITableView的自定义Cell(自定义单元格的复用)

在StoryBoard中,我们可以很方便地设置表格(tableView)内部单元格(cell)样式。但如果多个页面的tableView单元格样式都一样的话,再一个个单独设置不仅麻烦,而且会造成代码冗余。

最好的办法就是把单元格提取出来做成自定义组件,从而实现cell的复用。
对于自定义单元格组件,我门既可以通过继承 UITableViewCell,使用纯代码来实现。也可以配合 XIB 来实现。前面一种方法我原来写过很多样例了,本文介绍后面一种方法。

1,使用xib制作tableView的cell介绍

同纯代码相比,xib实现自定义样式会方便很多。不管布局约束,还是样式的设置,使用xib都很简单。
下面通过xib实现如下的自定义单元格:白底圆角,左侧是标题文本,右侧是图片。

             

 

2,自定义cell组件的步骤

(1)首先,创建自定义cell类(MyTableViewCell)的时候选中“Also create XIB file”

(2)创建完毕后,我们可以看到除了自动生成了一个 swift 文件,还有个对应的 xib 文件

(3)打开xib文件,将其背景色设为Clear Color。向里面拖入一个 View 组件,并设置约束。

注意:设置约束时去掉“Constrain to margins”的勾选,这样做防止自动添加外边距。

                    
  

(4)接着往新增的View组件里面拖入一个 Image View 组件和一个 Lable 组件(lines属性设为2),并添加相关的约束

(5)把xib中新增的三个组件在对应的类中做代码关联。同时在初始化函数 awakeFromNib() 中设置圆角

 代码如下 复制代码

import UIKit
 
class MyTableViewCell: UITableViewCell {
 
    @IBOutlet weak var customView: UIView!
    
    @IBOutlet weak var customLabel: UILabel!
    
    @IBOutlet weak var customImage: UIImageView!
    
    override func awakeFromNib() {
        super.awakeFromNib()
 
        //设置cell是有圆角边框显示
        customView.layer.cornerRadius = 8
    }
 
    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }  
}

3,自定义cell组件的使用

 代码如下 复制代码

import UIKit
 
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    var tableData = [["title":"Swift - 让标签栏按钮UITabBarItem图片居中","image":"img1.png"],
    ["title":"Swift - 使用SSZipArchive实现文件的压缩、解压缩","image":"img2.png"],
    ["title":"Swift - 使用LINQ操作数组/集合","image":"img3.png"],
    ["title":"Swift - 给表格UITableView添加索引功能","image":"img4.png"],
    ["title":"Swift - 列表项尾部附件点击响应","image":"img5.png"],
    ["title":"Swift - 自由调整图标按钮中的图标和文字位置","image":"img6.png"]]
    
    var tableView:UITableView?
    
    override func loadView() {
        super.loadView()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //创建表视图
        self.tableView = UITableView(frame: UIScreen.mainScreen().applicationFrame,
            style:.Plain)
        self.tableView!.delegate = self
        self.tableView!.dataSource = self
        //设置表格背景色
        self.tableView!.backgroundColor = UIColor(red: 0xf0/255, green: 0xf0/255,
            blue: 0xf0/255, alpha: 1)
        //去除单元格分隔线
        self.tableView!.separatorStyle = .None
        
        //创建一个重用的单元格
        self.tableView!.registerNib(UINib(nibName:"MyTableViewCell", bundle:nil),
            forCellReuseIdentifier:"myCell")
        
        self.view.addSubview(self.tableView!)
    }
    
    //在本例中,只有一个分区
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1;
    }
    
    //返回表格行数(也就是返回控件数)
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.tableData.count
    }
    
    //单元格高度
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath)
        -> CGFloat {
        return 100
    }
    
    //创建各单元显示内容(创建参数indexPath指定的单元)
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
        -> UITableViewCell
    {
        let cell:MyTableViewCell = tableView.dequeueReusableCellWithIdentifier("myCell")
            as! MyTableViewCell
        let item = tableData[indexPath.row]
        cell.customLabel.text = item["title"]
        cell.customImage.image = UIImage(named:item["image"]!)
        return cell
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

时间: 2024-09-15 16:33:46

Swift使用xib制作UITableView的自定义Cell(自定义单元格的复用)的相关文章

java-利用jxl.Cell读取单元格问题

问题描述 利用jxl.Cell读取单元格问题 单元格显示内容为:2014年3月5日 其单元格格式为:yyyy"年"m"月"d"日" 但是,当我使用下面的代码读取的时候, String data=cell.getContents(); if(cell.getType()==CellType.DATE){ DateCell dc=(DateCell)cell; data=sdf.format(dc.getDate()); }else if(cell.

uitableview-UITableView使用xib自定义cell 下面这段代码滑动的时候会不流畅?

问题描述 UITableView使用xib自定义cell 下面这段代码滑动的时候会不流畅? 界面用xib设置好了 在使用的时候 - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CustomerCell"; CustomCell *cell = [tableV

Swift自定义cell中如何做到页面跳转并且传值

问题描述 Swift自定义cell中如何做到页面跳转并且传值 Swift语言, 我是折叠tableview,自定义了一个cell,cell里面有很多按钮,点击每个按钮都跳转到不同的页面,我想请教下如何带值跳转呢? 解决方案 cell中的按钮添加的时候设置button的tag.然后点击的时候获取tag来得到不同的值跳转页面

iOS应用中使用Auto Layout实现自定义cell及拖动回弹_IOS

自定义 cell 并使用 Auto Layout创建文件 我们可以一次性创建 xib 文件和类的代码文件. 新建 Cocoa Touch Class: 设置和下图相同即可: 检查成果 分别选中上图中的 1.2 两处,检查 3 处是否已经自动绑定为 firstTableViewCell,如果没有绑定,请先检查选中的元素确实是 2,然后手动绑定即可. 完成绑定工作 切换一页,如下图进行 Identifier 设置: 新建 Table View Controller 页面 新建一个 Table Vie

详解ios中自定义cell,自定义UITableViewCell_IOS

通过继承UITableViewCell来自定义cell 1.创建一个空的项目.命名: 2.创建一个UITableViewController 并且同时创建xib: 3.设置AppDelegate.m中window的根控制器为刚刚创建的TableViewController: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { s

iOS中 自定义cell升级版 (高级)

接上次分享的自定义cell进行了优化:http://blog.csdn.net/qq_31810357/article/details/49611255 指定根视图: [objc] view plain copy self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootTableViewController alloc] initWithStyle:UITa

iOS中大流中的自定义cell 技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载. AppDelegate.m指定根视图 [objc] view plain copy self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootTableViewController alloc] initWithStyle:UITableViewStylePlain]];   //根视图 RootTable

Cell自适应高度及自定义cell混合使…

第一部分:UItableViewCellAdaptionForHeight : cell的自适应高度 第二部分:CustomTableViewCell:自定义cell的混合使用(以简单通讯录为例) =================cell的自适应高度==================== AppDelegate.m #import "NewsController.h"  self.window.rootViewController = [[[UINavigationControll

求方法,大神们自定义cell ios

问题描述 求方法,大神们自定义cell ios 怎么自定义一个cell像手机qq音乐一样里面有图片有两个label,点击它,相应的表格可以跳到播放界面 解决方案 创建一个类继承UITableViewCell,如果用代码写,就在.h文件里写入你所需要的控件,再在.m文件里创建:如果是xib,就直接拖控件并绑定 解决方案二: http://www.cnblogs.com/hellocby/archive/2012/05/23/2514270.html 解决方案三: 直接把label替换成button