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

时间:2022-03-02 23:35:21
<code class="objectivec"><strong><span style="font-size:18px;"><span class="hljs-preprocessor">隐藏分割线、</span><span class="hljs-preprocessor">隐藏多余Cell</span></span></strong>
   <span class="hljs-comment">//隐藏分割线</span>
   tableView<span class="hljs-variable">.separatorStyle</span> = <span class="hljs-built_in">UITableViewCellSeparatorStyle</span><span class="hljs-variable">.None</span>
   <span class="hljs-comment">//隐藏多余的cell</span>
   tableView<span class="hljs-variable">.tableFooterView</span> = <span class="hljs-built_in">UIView</span>(frame: <span class="hljs-built_in">CGRectZero</span>)</code>

<code class="swift"><span style="font-size:18px;"><strong><span class="hljs-comment">分割线头部顶到底、分割线颜色</span></strong></span>
    <span class="hljs-comment">//启动、旋转、视图大小位置发生改变、增加子视图等都会调用</span>
    <span class="hljs-keyword">override</span> <span class="hljs-func"><span class="hljs-keyword">func</span> <span class="hljs-title">viewDidLayoutSubviews</span><span class="hljs-params">()</span></span> {
        tableView.separatorInset = <span class="hljs-type">UIEdgeInsetsZero</span>
        tableView.layoutMargins = <span class="hljs-type">UIEdgeInsetsZero</span>
        <span class="hljs-comment">//articleTableView.separatorColor = UIColor.redColor() //分割线颜色</span>
    }
    <span class="hljs-comment">//没当cell即将出现屏幕时候都会调用此方法</span>
    <span class="hljs-func"><span class="hljs-keyword">func</span> <span class="hljs-title">tableView</span><span class="hljs-params">(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)</span></span> {
        cell.separatorInset = <span class="hljs-type">UIEdgeInsetsZero</span>
        cell.layoutMargins = <span class="hljs-type">UIEdgeInsetsZero</span>
    }</code>

<code class="objectivec"><strong><span style="font-size:18px;"><span class="hljs-preprocessor">点击后效果 Cell 背景等更改</span></span></strong>
  <span class="hljs-comment">//点击Cell时,没有点击效果</span>
  cell<span class="hljs-variable">.selectionStyle</span> = <span class="hljs-built_in">UITableViewCellSelectionStyle</span><span class="hljs-variable">.None</span>
  <span class="hljs-comment">//系统默认的颜色  .Blue蓝色-默认 .Grap灰色 .None 无色</span>

 <span class="hljs-comment">//点击Cell时,自定义选中后的背景视图</span>
  <span class="hljs-comment">//背景颜色</span>
  cell<span class="hljs-variable">.selectedBackgroundView</span> = <span class="hljs-built_in">UIView</span>()
  cell<span class="hljs-variable">.selectedBackgroundView</span>?<span class="hljs-variable">.backgroundColor</span> = <span class="hljs-built_in">UIColor</span><span class="hljs-variable">.clearColor</span>()
  <span class="hljs-comment">//背景图片</span>
  cell<span class="hljs-variable">.selectedBackgroundView</span> = <span class="hljs-built_in">UIImageView</span>(image: <span class="hljs-built_in">UIImage</span>(named: article<span class="hljs-variable">.avatarImage</span>))

 <span class="hljs-comment">//cell 右边的辅助的提示</span>
 cell<span class="hljs-variable">.accessoryType</span> =  <span class="hljs-variable">.DisclosureIndicator</span> <span class="hljs-comment">//></span>
 <span class="hljs-comment">//.Checkmark //√    .DetailDisclosureButton // ! >    .DetailButton // !</span></code>

<code class="cpp"><strong><span style="font-size:18px;"><span class="hljs-preprocessor">类似button点击效果闪一下</span></span></strong>
   <span class="hljs-comment">//在 didSelectRowAtIndexPath 方法内使用</span>
   <span class="hljs-comment">//点击Cell时 一闪而过 适合转场时候交互 - </span>
  tableView.deselectRowAtIndexPath(indexPath, animated: <span class="hljs-literal">false</span>) <span class="hljs-comment">// - true 动画慢吞吞,适合不转场时</span></code>

<code class="swift"><span class="hljs-number"></span><strong><span style="font-size:18px;"><span class="hljs-type">Tableview</span>视图<span class="hljs-type">Cell</span>进入动画 从底部往上弹</span></strong>
    <span class="hljs-comment">//加载动画 Cell 往上冲 在 viewWillAppear 中使用</span>
    <span class="hljs-func"><span class="hljs-keyword">func</span> <span class="hljs-title">animateTable</span><span class="hljs-params">()</span></span> {

        <span class="hljs-keyword">self</span>.tableView.reloadData()

        <span class="hljs-keyword">let</span> cells = tableView.visibleCells
        <span class="hljs-keyword">let</span> tableHeight = tableView.bounds.size.height
        <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> cells {
            <span class="hljs-keyword">let</span> cell: <span class="hljs-type">UITableViewCell</span> = i <span class="hljs-keyword">as</span> <span class="hljs-type">UITableViewCell</span>
            cell.transform = <span class="hljs-type">CGAffineTransformMakeTranslation</span>(<span class="hljs-number">0</span>, tableHeight)
        }

        <span class="hljs-keyword">var</span> index = <span class="hljs-number">0</span>
        <span class="hljs-keyword">for</span> a <span class="hljs-keyword">in</span> cells {
            <span class="hljs-keyword">let</span> cell: <span class="hljs-type">UITableViewCell</span> = a <span class="hljs-keyword">as</span> <span class="hljs-type">UITableViewCell</span>
            <span class="hljs-type">UIView</span>.animateWithDuration(<span class="hljs-number">1.0</span>, delay: <span class="hljs-number">0.05</span> * <span class="hljs-type">Double</span>(index), usingSpringWithDamping: <span class="hljs-number">0.8</span>, initialSpringVelocity: <span class="hljs-number">0</span>,
options: [], animations: {
                cell.transform = <span class="hljs-type">CGAffineTransformMakeTranslation</span>(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>);
                }, completion: <span class="hljs-literal">nil</span>)
            index += <span class="hljs-number">1</span>
        }
    }</code>

<code class="swift"><strong><span style="font-size:18px;">点击cell展开样式</span></strong>
    <span class="hljs-comment">//比如一个使用了SB约束好的label ,tag = 666 把他  属性 lines = 0 与 1转换 即显示单行或多行</span>
    <span class="hljs-comment">// -1.记得使用SB设置好约束</span>
    <span class="hljs-keyword">override</span> <span class="hljs-func"><span class="hljs-keyword">func</span> <span class="hljs-title">viewDidLoad</span><span class="hljs-params">()</span></span> {
        <span class="hljs-keyword">super</span>.viewDidLoad()
        <span class="hljs-comment">// 0.启动自动布局计划</span>
        tableView.estimatedRowHeight = <span class="hljs-number">44</span>
        tableView.rowHeight = <span class="hljs-type">UITableViewAutomaticDimension</span>
    }

    <span class="hljs-comment">// 1.先声明的一个字典 - 记录每个cell展收状态</span>
    <span class="hljs-keyword">var</span> dict:<span class="hljs-type">Dictionary</span><<span class="hljs-type">Int</span>,<span class="hljs-type">Bool</span>> = [:]

    <span class="hljs-comment">// 2.根据字典显示cell状态</span>
    <span class="hljs-keyword">override</span> <span class="hljs-func"><span class="hljs-keyword">func</span> <span class="hljs-title">tableView</span><span class="hljs-params">(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)</span></span> -> <span class="hljs-type">UITableViewCell</span> {
        <span class="hljs-keyword">let</span> cell = tableView.dequeueReusableCellWithIdentifier(<span class="hljs-string">"Cell"</span>, forIndexPath: indexPath)

        <span class="hljs-keyword">let</span> label = cell.contentView.viewWithTag(<span class="hljs-number">666</span>) <span class="hljs-keyword">as</span>! <span class="hljs-type">UILabel</span>
        label.text = <span class="hljs-string">"本文导航 \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 点击展开"</span>
        <span class="hljs-keyword">if</span> dict[indexPath.row] == <span class="hljs-literal">false</span> {
            label.numberOfLines = <span class="hljs-number">0</span>
        } <span class="hljs-keyword">else</span> {
            label.numberOfLines = <span class="hljs-number">1</span>
        }

        <span class="hljs-keyword">return</span> cell
    }

    <span class="hljs-comment">// 3. 在 beginUpdates() - endUpdates() 放代码 有连续动画效果</span>
    <span class="hljs-keyword">override</span> <span class="hljs-func"><span class="hljs-keyword">func</span> <span class="hljs-title">tableView</span><span class="hljs-params">(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)</span></span> {
        tableView.deselectRowAtIndexPath(indexPath, animated: <span class="hljs-literal">true</span>) <span class="hljs-comment">//点击闪动效果</span>
        <span class="hljs-keyword">let</span> cell = tableView.cellForRowAtIndexPath(indexPath)
        <span class="hljs-keyword">let</span> label = cell!.contentView.viewWithTag(<span class="hljs-number">666</span>) <span class="hljs-keyword">as</span>! <span class="hljs-type">UILabel</span>
        tableView.beginUpdates() <span class="hljs-comment">//开始</span>
        <span class="hljs-keyword">if</span> label.numberOfLines == <span class="hljs-number">0</span> {
            label.numberOfLines = <span class="hljs-number">1</span>
            dict[indexPath.row] = <span class="hljs-literal">true</span>
        } <span class="hljs-keyword">else</span> {
            label.numberOfLines = <span class="hljs-number">0</span>
            dict[indexPath.row] = <span class="hljs-literal">false</span>
        }
        tableView.endUpdates()
    }</code>

<code class="objectivec"><strong><span style="font-size:18px;"><code class="objectivec"><span class="hljs-preprocessor">没有数据时候提示 可以自行加入空数据时候显示</span></code> </span></strong>   <span class="hljs-comment">
//判断有没有数据显示 提示</span>
    func showIfNoAnswer() {
            let imageView = <span class="hljs-built_in">UIImageView</span>(frame: <span class="hljs-built_in">CGRectMake</span>(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">60</span>, <span class="hljs-number">60</span>))
            let image = <span class="hljs-built_in">UIImage</span>(named: <span class="hljs-string">"sad"</span>)
            imageView<span class="hljs-variable">.image</span> = image?<span class="hljs-variable">.imageWithRenderingMode</span>(<span class="hljs-variable">.AlwaysTemplate</span>)
            imageView<span class="hljs-variable">.tintColor</span> = <span class="hljs-built_in">UIColor</span><span class="hljs-variable">.grayColor</span>()
            imageView<span class="hljs-variable">.center</span> = <span class="hljs-built_in">CGPointMake</span>(<span class="hljs-keyword">self</span><span class="hljs-variable">.view</span><span class="hljs-variable">.center</span><span class="hljs-variable">.x</span>, <span class="hljs-number">145</span>)
            imageView<span class="hljs-variable">.tag</span> = <span class="hljs-number">33</span>  <span class="hljs-comment">// 方便 remove</span>
            <span class="hljs-keyword">self</span><span class="hljs-variable">.view</span><span class="hljs-variable">.addSubview</span>(imageView)

            let label = <span class="hljs-built_in">UILabel</span>(frame: <span class="hljs-variable">.zero</span>)
            label<span class="hljs-variable">.text</span> = <span class="hljs-string">"加载失败"</span>
            label<span class="hljs-variable">.font</span> = <span class="hljs-built_in">UIFont</span>(name: <span class="hljs-string">"New Gulim"</span>, size: <span class="hljs-number">20</span>)
            label<span class="hljs-variable">.textColor</span> = <span class="hljs-built_in">UIColor</span><span class="hljs-variable">.grayColor</span>()
            label<span class="hljs-variable">.textAlignment</span> = <span class="hljs-variable">.Center</span>
            label<span class="hljs-variable">.tag</span> = <span class="hljs-number">3</span>

            label<span class="hljs-variable">.sizeToFit</span>()
            label<span class="hljs-variable">.backgroundColor</span> = <span class="hljs-built_in">UIColor</span><span class="hljs-variable">.clearColor</span>()
            label<span class="hljs-variable">.center</span> = <span class="hljs-built_in">CGPointMake</span>(<span class="hljs-keyword">self</span><span class="hljs-variable">.view</span><span class="hljs-variable">.center</span><span class="hljs-variable">.x</span>, <span class="hljs-number">200</span>)
            view<span class="hljs-variable">.addSubview</span>(label)
        }
    }</code>

Swift开发UITableView常用的一些细节知识点介绍的更多相关文章

  1. Swift开发第五篇——四个知识点&lpar;Struct Mutable方法&amp&semi;Tuple&amp&semi;autoclosure&amp&semi;Optional Chain&rpar;

    本篇分三部分: 一.Struct Mutable方法 二.多元组(Tuple) 的使用 三.autoclosure 的使用 四.Optional Chain 的使用 一.Struct Mutable方 ...

  2. Django学习笔记(19)——BBS&plus;Blog项目开发(3)细节知识点补充

    本文将BBS+Blog项目开发中所需要的细节知识点进行补充,其中内容包括KindEditor编辑器的使用,BeautifulSoup 模块及其防XSS攻击,Django中admin管理工具的使用,me ...

  3. Swift开发中 JSON对象&sol;JSON字符串&sol;Data的互转

    本文将介绍Swift开发中常用的转换(JSON对象/JSON字符串/Data之间的互相转换) #pragma mark - JSON(对象)----->JSON字符串 1.原生方法 //JSON ...

  4. 依赖注入及AOP简述(十)——Web开发中常用Scope简介 &period;

    1.2.    Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l        第一个比较常用的就是Application级Scope,通常我们会将一 ...

  5. Swift开发常用知识点

    #pragma mark - as/类型转换as? / as! 需要根据前面的返回值决定 有?证明可选,可能为空:需要弱解包 没有?证明一定有值:大胆解包 as? 前面的结果是可选的 if let / ...

  6. 前端开发概述&plus;JS基础细节知识点

    一 前端开发概述 html页面:html css javascript 拿到UI设计图纸:切图-->html+css静态布局-->用JS写一写动态效果-->ajax和后台进行交互,把 ...

  7. 牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例&lpar;开发时常用&rpar;、懒汉式单例&lpar;面试时常用&rpar;、单例设计模式的内存图解

    不多说,直接上干货! 什么是单例设计模式? 解决的问题:可以保证一个类在内存中的对象唯一性,必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性. 如何保证? 1.不允许其他程序用new ...

  8. iOS开发之常用第三方框架(下载地址,使用方法,总结)

    iOS开发之常用第三方框架(下载地址,使用方法,总结) 说句实话,自学了这么久iOS,如果说我不知道的但是又基本上都摸遍了iOS相关知识,但是每次做项目的时候,遇到难一点的地方或者没试过的东西就闷了. ...

  9. 《Swift开发指南》

    <Swift开发指南> 基本信息 作者: 关东升    赵志荣 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115366245 上架时间:2014-8-5 出版日期:20 ...

随机推荐

  1. 神奇的VIM~转IBM

    % 地址范围符号,代表文件中的所有行,作用等同于地址范围 1,$ . 与任意单字符(换行符除外)匹配,例如 y.s 可以匹配 yas y.s 或 y s 等等. * 与前一字符的0次或多次出现匹配,例 ...

  2. &lbrack;置顶&rsqb; Android 2016新技术

    版权声明:分享技术,传播快乐.如果本博客对你有帮助,请在我的博客首页为我打赏吧! 2016你需要了解Android有以下新兴的技术与框架,有些也许还不成熟,但是你应该去了解下,也许就是未来的方向. K ...

  3. OpenCV学习笔记——图像的腐蚀与膨胀

    顺便又复习了一下cvcopy如何进行图像拼接(最近觉得打开多幅图像分别看不如缩小掉放拼接到一幅图像上对比来的好) 首先把拼接的目标图像设置兴趣区域ROI,比如我有一个total,要把a.b.c分别从左 ...

  4. 数据词典与ABAP类型映射

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. from声明

    在整个应用程序,只有三行声明.这是最短单WIN32应用,但它的功能是非常有限,简单地显示一个消息框,示出来,其他什么事情也没有做.以下就来分析这三行语句了.别小看这三行语句.其实是隐藏着非常多知识点在 ...

  6. &lbrack;转&rsqb; MMO即时战斗:地图角色同步管理和防作弊实现

    一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角色的位置.以及角色身 ...

  7. ios MVVM实践 刷新网络请求&plus;tableView展示数据

    [实现效果] [目录结构相关] 此示例展示用的是MVVM结构形式,表述如下 M:数据Model的存储,可以用来对属性进行处理.(即胖model概念,上图中xx万人订阅这个处理方法写在Model内) V ...

  8. HDU&period;3311&period;Dig The Wells&lpar;DP 斯坦纳树&rpar;

    题目链接 \(Description\) 有n座庙.一共n+m个点,可以在任意一些点修建水井,不同位置花费不同:也可以某些点之间连无向边共享水.求使n座庙都有水的最小花费. \(Solution\) ...

  9. NAT ------ 内网的主机如何通过路由器与外网的主机通信

    内网主机A,路由器B,外网主机C 使用了两个协议: 路由:位于网络层,为数据包提供一个寻径的算法,不改变数据包的源IP和目的IP,但是会修改源MAC和目的MAC,只在同个网段的进行数据的转发 NAT: ...

  10. rac数据库单连接报错ora-12537解决办法

    1.现象如下: C:\Users\Administrator.DBA-PC>sqlplus sys/oracle@192.168.100.33:1521/orcl as sys dba SQL* ...