第七章 美化DetailView界面

本项目是《beginning iOS8 programming with swift》中的项目学习笔记==》全部笔记目录

------------------------------------------------------------------------------------------------------------------

1. 往DetailViewController里拖一个Tabel View控件,设置prototype cells为1,将imageView控件在文档视图中拖到Table View里面,作为Header,设置表格的数据源和代理。
2. Aspect Fit等图片设置原理如下图:

3. 往原型Cell里拖入两个Label控件,分别设置文字为Name和Value。并新建一个自定义UITableViewCell类DetailTableViewCell,并定义两个成员变量,关联到控件上。
4. 修改DetailViewController中的成员变量为Restaurant,实现表格数据源方法(貌似这里不用连线tableView到IBOutlet):

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("DetailTableCell", forIndexPath: indexPath) as DetailTableViewCell
    switch indexPath.row {
    case 0:
        cell.nameLabel.text = "Name"
        cell.valueLabel.text = restaurant.name
    case 1:
        cell.nameLabel.text = "Type"
        cell.valueLabel.text = restaurant.type
    case 2:
        cell.nameLabel.text = "Location"
        cell.valueLabel.text = restaurant.location
    case 3:
        cell.nameLabel.text = "Been here"
        cell.valueLabel.text = restaurant.isVisited ? "I‘ve been here" : "No"
    default:
        cell.nameLabel.text = ""
        cell.valueLabel.text = ""
    }

         // 设置单元格背景色
    cell.backgroundColor = UIColor.clearColor()
    // 清除多余的表格行
    tableView.tableFooterView = UIView(frame: CGRectZero)
    // 自定义单元格分割线
    tableView.separatorColor = UIColor.orangeColor()

    return cell
}

效果图:

5. 自定义导航栏主题
在didFinishLaunchingWithOptions方法中自定义导航栏,也可以自定义一个导航控制器类,并在initialize方法中设置导航栏主题

// 设置导航栏背景色
UINavigationBar.appearance().barTintColor = UIColor.orangeColor()
// 设置导航栏上面Item的颜色
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
// 设置导航栏文字字体
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName: UIFont.systemFontOfSize(22.0)]

6. 设置返回按钮文字为空(viewDidLoad):

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)

7. 设置导航栏标题(Detail的viewDidLoad):

self.title = restaurant.name

8. 设置滑动隐藏导航栏。可以在storyboard中设置OnSwipe勾上,但是这样会对全局的导航栏生效,所以如果只想Restaurant表格滑动隐藏导航栏而Detail表格滑动不隐藏,最好是在代码里设置。可以在哪儿设置合适呢?viewDidLoad中吗?如果在Restaurant中设置true,在Detail中设置false,但是导航后并不能按照预期的变化。因为viewDidLoad方法只会在界面初次加载的时候执行一次。因此,在Restaurant控制器和Detail控制器的viewWillAppear方法中分别执行:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationController?.hidesBarsOnSwipe = true
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationController?.hidesBarsOnSwipe = false
    self.navigationController?.setNavigationBarHidden(false, animated: true)
} 

9. 现在导航栏文字颜色是白色,但是状态栏颜色是黑色,需要处理一下。
  9.1 如果是修改一个控制器的状态栏:

override func preferredStatusBarStyle() ->UIStatusBarStyle {
    return .LightContent
}

9.2 如果是修改整个应用程序的状态栏:
    1. 修改View controller-based status bar appearance设置为NO

  2. 在didFinishLaunchingWithOptions方法中:
UIApplication.sharedApplication().statusBarStyle = .LightContent

时间: 2024-11-06 17:54:39

第七章 美化DetailView界面的相关文章

再读大道之简第七章第八章

有一句话叫做,理想很丰满,现实很骨感.原来,单纯的以为,软件工程不就是码农么,就连工作也是一心趴在课编程编程,各种编程上,可是,现实中的软件工程和理想中或者说,想象中的还是有很大的差距的.就连我们心中的大企业,也并不是想象中的那样.比如IBM知道把握力量总之比创造力量来得经济.我还单纯的以为,所有的公司只是为了盈利呢,依靠完成的软件去盈利.此时不禁自嘲一番,还是太嫩了啊.所有的大公司在标准.理论.语言上的争来夺取,未必全然出于“软件实现”的考虑.对统一理论.统一工具.统一过程的企图,其最终目的是

第七章-寻找软件的注册码

我们来寻找软件真正的注册码! 寻找软件的注册码就像你小时玩的躲猫猫一样,简单又有趣,虽然后来你会不这样觉的 好的,我们开始. 我不知道你有没有明白我前面在原理中讲的那些东西,如果没明白,我就再说一遍 软件通过你输入的用户名或者机器码什么的生成一个正确的注册码来与你输入的注册码进行比较,如果两个相同,也就是说你输入的注册码是正确的话,那软件就会完成注册.如果你输入的不正确,嘿嘿,当然就不会注册成功. 好的,现在你已经知道软件会有一个比较两个注册码的过程,这就是关键所在.一般如果你遇到的是那种明码比

阅读《大型网站技术架构:核心原理与案例分析》第五、六、七章

题目:阅读<大型网站技术架构:核心原理与案例分析>第五.六.七章,结合<XXX需求征集系统>,分析如何增加相应的功能,提高系统的可用性和易用性,撰写一篇1500字左右的博客阐述你的观点 在这一节课上,我们学习了系统质量属性其中的可用性和易用性.那么质量属性是什么呢,质量属性是高于对系统功能(即对系统能力.服务和行为)的基本的要求的.系统质量属性讲重点放在了可用性.可修改性.性能.安全性.可测试性和易用性.从设计师方面,系统质量属性一般存在三个问题:(1)为属性提供的定义并不是可操作

ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 GIS的六大功能是数据获取.存储.查询.分析.表达.输出.在前面的内容里已经介绍了使用ArcGIS进行数据获取.存储.查询.表达和输出的过程,本章将介绍如何在ArcGIS中进行地理分析.分析是GIS的核心和灵魂,是GIS区别于一般的信息系统.CAD或者电子地图系统的主要标志之一. GIS分析,就是研究

linux &nbsp; 第七章 磁盘和文件系统管理(一)

linux 第七章磁盘和文件系统管理(一) 享受生活 热爱挑战 明远分享 每章一句话: 在别人光鲜的背后有着太多太多,别人不知道的痛苦,自己不喜欢的人,以微笑面对,默默地为他祝福:对于喜欢的人,真情流露,真诚相待.人在做天在看,冥冥中自有因果安排,永远保持一颗善良的心,持续做对的事情,不断地提醒自己,低调做人,高调做事. 要求:    跟着做一下吧 看不清图片就点一下图片 一,关机后添加一块20GB的SCSI磁盘,重新开机进入RHEL 5系统 二,分区并格式化 1, 使用fdisk命令对新硬盘进

Android深度探索HAL与驱动开发-——第七章

第七章主要介绍了嵌入式组态软件结构,.界面设计和功能选择区设计以及辅助功能区设计和程序生成区设计Android应用并采用Java开发嵌入式.   Android嵌入式是通过拖拽式进行程序设计,双击指定组件和调整组件属性完成的. Androd界面设计.包括布局.组件的使用.android嵌入式组态软件功能选择区设计包括界面设计.IO设计和数据库设计.   1.界面设计:分为六个模块,布局.按钮类.文本类.时间类.特殊类.属性组成.(1)布局类中包括绝对布局.框架布局和线性布局:(2)按钮类包括普通

《Python核心编程》 第七章 映射和集合类型 - 习题

课后习题 7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答: dict1 = {'1' :' python' } dict2 = {'2' :"hello" } dict1.update(dict2) dictAll = dict1 print dictAll Result: {'1': ' python', '2': 'hello'} 7–2. 字典的键.我们知道字典的值可以是任意的 Python 对象,那字典的键又如何呢?请试 着将除数字和字符串以外的其他不同类型

第七章

第七章 控制发光二极管. 尽管linux 驱动直接和硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的i/o内存进行交互.所谓I/O内存是通过各种接口(PCI, USB.蓝牙以太网等)连接到主机的硬件在主机的内存映射.Linux内核提供了多个与I/O内存交互的函数.Linux内核的内存管理模块负责同步I/O内存与硬件的数据. 每一个连接Linux 的硬件在I/O内存中都会有映射首地址.在使用ioread 32.ioread32等函数读写I/O内存时需要指定这些首地址.Led

第七章:常用类

第七章:常用类 包装类 java中有8中基本类型,对应有八种包装类作用:包装类中封装了该类型常用的属性和方法,以方便操作.byte---->Byteshort--->Shortint--->Integerlong---->Longfloat---->Floatdouble---->Doublechar---->Characterboolean---->Boolean装箱:将基本数据类型转换成包装类,经常通过构造方法完成.Integer i = new Int