欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Swift开发UITableView常用的一些细节知识点介绍

程序员文章站 2022-04-14 09:30:57
隐藏分割线、隐藏多余cell //隐藏分割线 tableview.separatorstyle = uitableviewcellseparatorstyle.none...
隐藏分割线、隐藏多余cell
   //隐藏分割线
   tableview.separatorstyle = uitableviewcellseparatorstyle.none
   //隐藏多余的cell
   tableview.tablefooterview = uiview(frame: cgrectzero)

分割线头部顶到底、分割线颜色
    //启动、旋转、视图大小位置发生改变、增加子视图等都会调用
    override func viewdidlayoutsubviews() {
        tableview.separatorinset = uiedgeinsetszero
        tableview.layoutmargins = uiedgeinsetszero
        //articletableview.separatorcolor = uicolor.redcolor() //分割线颜色
    }
    //没当cell即将出现屏幕时候都会调用此方法
    func tableview(tableview: uitableview, willdisplaycell cell: uitableviewcell, forrowatindexpath indexpath: nsindexpath) {
        cell.separatorinset = uiedgeinsetszero
        cell.layoutmargins = uiedgeinsetszero
    }

点击后效果 cell 背景等更改
  //点击cell时,没有点击效果
  cell.selectionstyle = uitableviewcellselectionstyle.none
  //系统默认的颜色  .blue蓝色-默认 .grap灰色 .none 无色

 //点击cell时,自定义选中后的背景视图
  //背景颜色
  cell.selectedbackgroundview = uiview()
  cell.selectedbackgroundview?.backgroundcolor = uicolor.clearcolor()
  //背景图片
  cell.selectedbackgroundview = uiimageview(image: uiimage(named: article.avatarimage))

 //cell 右边的辅助的提示
 cell.accessorytype =  .disclosureindicator //>
 //.checkmark //√    .detaildisclosurebutton // ! >    .detailbutton // !

类似button点击效果闪一下
   //在 didselectrowatindexpath 方法内使用
   //点击cell时 一闪而过 适合转场时候交互 - 
  tableview.deselectrowatindexpath(indexpath, animated: false) // - true 动画慢吞吞,适合不转场时

tableview视图cell进入动画 从底部往上弹
    //加载动画 cell 往上冲 在 viewwillappear 中使用
    func animatetable() {

        self.tableview.reloaddata()

        let cells = tableview.visiblecells
        let tableheight = tableview.bounds.size.height
        for i in cells {
            let cell: uitableviewcell = i as uitableviewcell
            cell.transform = cgaffinetransformmaketranslation(0, tableheight)
        }

        var index = 0  
        for a in cells {
            let cell: uitableviewcell = a as uitableviewcell
            uiview.animatewithduration(1.0, delay: 0.05 * double(index), usingspringwithdamping: 0.8, initialspringvelocity: 0, 
options: [], animations: {
                cell.transform = cgaffinetransformmaketranslation(0, 0);
                }, completion: nil)
            index += 1
        }
    }

点击cell展开样式
    //比如一个使用了sb约束好的label ,tag = 666 把他  属性 lines = 0 与 1转换 即显示单行或多行
    // -1.记得使用sb设置好约束
    override func viewdidload() {
        super.viewdidload()
        // 0.启动自动布局计划
        tableview.estimatedrowheight = 44
        tableview.rowheight = uitableviewautomaticdimension
    }

    // 1.先声明的一个字典 - 记录每个cell展收状态
    var dict:dictionary<int,bool> = [:]

    // 2.根据字典显示cell状态
    override func tableview(tableview: uitableview, cellforrowatindexpath indexpath: nsindexpath) -> uitableviewcell {
        let cell = tableview.dequeuereusablecellwithidentifier("cell", forindexpath: indexpath)

        let label = cell.contentview.viewwithtag(666) as! uilabel
        label.text = "本文导航 \n 1.隐藏分割线\n 2.隐藏多余cell\n 3.分割线头部顶到底、分割线颜色\n 4.自定义点击后效果 cell 背景等更改\n
 5.类似button点击效果 cell - 闪一下\n 6.tableview视图cell进入动画 从底部往上弹\n 7.tableviewcell使用sb约束 自动布局 \n 8. cell 点击展开"
        if dict[indexpath.row] == false {
            label.numberoflines = 0
        } else {
            label.numberoflines = 1
        }

        return cell
    }

    // 3. 在 beginupdates() - endupdates() 放代码 有连续动画效果
    override func tableview(tableview: uitableview, didselectrowatindexpath indexpath: nsindexpath) {
        tableview.deselectrowatindexpath(indexpath, animated: true) //点击闪动效果
        let cell = tableview.cellforrowatindexpath(indexpath)
        let label = cell!.contentview.viewwithtag(666) as! uilabel
        tableview.beginupdates() //开始
        if label.numberoflines == 0 {
            label.numberoflines = 1
            dict[indexpath.row] = true
        } else {
            label.numberoflines = 0
            dict[indexpath.row] = false
        }
        tableview.endupdates()
    }

没有数据时候提示 可以自行加入空数据时候显示    
//判断有没有数据显示 提示
    func showifnoanswer() {
            let imageview = uiimageview(frame: cgrectmake(0, 0, 60, 60))
            let image = uiimage(named: "sad")
            imageview.image = image?.imagewithrenderingmode(.alwaystemplate)
            imageview.tintcolor = uicolor.graycolor()
            imageview.center = cgpointmake(self.view.center.x, 145)
            imageview.tag = 33  // 方便 remove
            self.view.addsubview(imageview)

            let label = uilabel(frame: .zero)
            label.text = "加载失败"
            label.font = uifont(name: "new gulim", size: 20)
            label.textcolor = uicolor.graycolor()
            label.textalignment = .center
            label.tag = 3

            label.sizetofit()
            label.backgroundcolor = uicolor.clearcolor()
            label.center = cgpointmake(self.view.center.x, 200)
            view.addsubview(label)
        }
    }