加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift开发笔记16 - 使用xib自定义一个控件(复合控件)

发布时间:2020-12-14 01:37:22 所属栏目:百科 来源:网络整理
导读:在之前的文章:《swift开发笔记10 - 通过drawRect自定义控件外观》中介绍了如何自定义一个按钮控件的外观。 新的问题是,我怎么做一个复合控件,比如一个label和一个button构成一个控件,并可以在静态表格的单元格中重用呢,并且我不想用纯代码的方式来做这

在之前的文章:《swift开发笔记10 - 通过drawRect自定义控件外观》中介绍了如何自定义一个按钮控件的外观。

新的问题是,我怎么做一个复合控件,比如一个label和一个button构成一个控件,并可以在静态表格的单元格中重用呢,并且我不想用纯代码的方式来做这个复合控件

参考文章iOS swift使用xib绘制UIView找到了解决办法。

首先说下在storyboard中使用静态表格做的界面布局:


在静态表格中类似“个人资料”中单元格的定义 可以通过直接拖拽控件的方式完成,但是像评价这栏的单元格是动态生成的,数目不固定,并且每行的内容类似,最好是能用一个复合控件来填充。

首先建一个xib文件:


然后拖一个table view cell 到xib中,然后拖label和按钮,并设置布局:


注意“五角星”按钮有select状态,其image是红五角星,表示选中

然后给这个单元格xib命名:oneRizhiListCell


然后为这个复合控件建立Cocoa Touch class文件,这个文件继承UITableViewCell,并在xib的class属性中选择该类,最后如下所示:


然后右键拖拽label和button到class中,建立outlets,并处理按钮的选中事件:

import UIKit

class oneRizhiCellView: UITableViewCell {

    @IBOutlet weak var NameLabel: UILabel!
    @IBOutlet weak var isOkButton: UIButton!
    
    
    
    override func drawRect(rect: CGRect) {
        // Drawing code
         isOkButton.addTarget(self,action: "buttonSelected:",forControlEvents: UIControlEvents.TouchUpInside)
        //也可以通过代码添加控件
        //self.addSubview(<#T##view: UIView##UIView#>)
    }
    
    func buttonSelected(button: UIButton) {
        
        button.selected = !button.selected
    }
}

至此用xib自定义复合控件就做完了,然后再表格中这么用:
 
    override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       // let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier",forIndexPath: indexPath)
        let cell=super.tableView(tableView,cellForRowAtIndexPath: indexPath)
        cell.selectionStyle = UITableViewCellSelectionStyle.None
        
        switch (indexPath.section) {
        case 1:
            //日志
          
          let myView = NSBundle.mainBundle().loadNibNamed("oneRizhiListCell",owner: nil,options: nil).first as? UIView
          
          myView?.frame = CGRect(x: 0,y: 0,width: cell.frame.width,height:  40)
          //myView?.center = self.view.center
          
          if myView != nil {
            cell .contentView.addSubview(myView!)
          }
            
        case 2:
           
            //考勤

最后效果:


当然还没完,要想使这个静态表格像动态表格一样增加行数,还要调用insertRowsAtIndexPaths方法,或者override 它的

public func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath)才行

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读