swift语言IOS8开发战记18 NavigationItem

简介:    上一话中我们设置了地图定位,最后把地图定位界面改成了导航栏呈现,导航栏的返回按钮我们想要改成没有字体的形式,修改导航栏的按钮样式要回到上一个页面中,所以我们在DetailViewController的viewDidLoad方法中加上如下代码: self.

   上一话中我们设置了地图定位,最后把地图定位界面改成了导航栏呈现,导航栏的返回按钮我们想要改成没有字体的形式,修改导航栏的按钮样式要回到上一个页面中,所以我们在DetailViewController的viewDidLoad方法中加上如下代码:

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

这样返回按钮就成了如下的样子:


现在如果我们想要往列表中增加新的内容,需要给导航栏增加一个添加新餐馆的按钮。要在主页面上添加按钮,所以要回到ViewController中添加按钮,在viewDidLoad中添加以下代码:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: nil, action: "addRest")

顾名思义是在导航栏的右侧添加一个按钮,按钮样式是系统自带的Add样式,效果如红圈中所示:


然后我们新建一个控制器NewViewController用来展示跳转到的增加新餐馆的页面,实现新增按钮的跳转方法,跳到新页面

 func addRest(){
        let newVC = NewViewController()
        self.navigationController?.pushViewController(newVC, animated: true)
    }

我们来编辑NewViewController,首先在其中设定它的cell的格式,依旧让它做自己的datasource和delegate,代码如下:

import UIKit

class NewViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
let identifier = "newCell"
    override func viewDidLoad() {
        super.viewDidLoad()
self.view.backgroundColor = UIColor.orangeColor()
        
        //增加一个tableview
        var tableView = UITableView(frame: self.view.bounds, style: .Plain)
        tableView.dataSource = self
        tableView.delegate = self
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "newCell")
        self.view.addSubview(tableView)
        
    }
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = UITableViewCell(style: .Default, reuseIdentifier: "newCell")
        cell.textLabel?.text = "hello"
        return cell
    }
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        var row:NSInteger = indexPath.row
        var rowHeight:CGFloat = 72
        if row == 0
        {
        rowHeight = 250
        }
        return rowHeight
    }
}

我们需要定义datasource和delegate的一些方法,tableView中有5行,先让每一行显示一个hello,以验证复用。另外第一行要高一点,用来显示图片,其他行显示文字,运行后的效果如下:


每一行的信息比较复杂,我们需要专门编写一个方法来实现cell的初始化,方法congigureCell的代码如下,我们先初始化第一行,让它显示一张图片:

    func configureCell(cell:UITableViewCell, indexPath: NSIndexPath){
        let row:NSInteger = indexPath.row
        if row == 0{
        let imageView = UIImageView(frame: CGRectMake(0, 0, 320, 250))
            imageView.image = UIImage(named: "camera")
            imageView.contentMode = UIViewContentMode.ScaleAspectFit//适应尺寸
            cell.addSubview(imageView)
        }

在cell的代理方法中需要用这个方法来初始化cell,代码如下:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = UITableViewCell(style: .Default, reuseIdentifier: "newCell")
        self.configureCell(cell, indexPath: indexPath)
        return cell
    }

效果如图:


之后的效果我们下一话再来继续。


目录
相关文章
|
3天前
|
存储 Swift 索引
Swift开发——索引器扩展
扩展用于向已存在的类型(例如,类、结构体、枚举和协议等)中添加新的功能,扩展甚至可以向系统类型(包括无法查阅代码的类型)中添加新的功能,但是扩展不能覆盖原类型中已有的方法,扩展也不能向类中添加新的存储属性。
26 6
Swift开发——索引器扩展
|
3天前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
8 4
Swift开发——属性检查器
|
5天前
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
21 5
Swift开发——简单函数实例
|
2天前
|
存储 Swift
Swift开发——弱占用
Swift的自动引用计数(ARC)管理类实例内存,通过强引用保持实例存活。当出现强引用循环时,可使用`weak`关键字创建弱引用,避免阻止实例释放。弱引用在不再被强引用时导致对象立即释放。示例中,添加`weak`至`author`和`book`变量防止引用循环,使得两者析构器均执行,释放内存。图2展示了弱引用结构,当解除所有强引用后,ARC自动释放实例,调用析构器。
11 1
Swift开发——弱占用
|
2天前
|
Java Android开发 Swift
探索Android与iOS开发的差异:平台选择对项目成功的影响
【6月更文挑战第18天】在移动应用开发的广阔天地中,Android和iOS两大平台各据一方,它们在市场份额、用户群体及开发环境上各有千秋。本文将深入分析这两个操作系统的开发差异,探讨如何根据项目需求选择合适的平台,并讨论跨平台解决方案的可行性与挑战。我们将通过实际案例,揭示平台选择对项目成功的关键性影响,为开发者提供决策支持。
|
2天前
|
Swift iOS开发 开发者
探索iOS开发中的SwiftUI框架
在苹果的生态系统中,SwiftUI代表了iOS应用开发的一次重大飞跃。作为一项现代化的UI工具集,它旨在简化和加速界面设计过程,同时确保代码的清晰度与可维护性。本文将深入探讨SwiftUI的核心概念、优势以及在实际开发中的应用案例,为开发者提供全面而实用的指南。
|
3天前
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。
|
4天前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
6 0
Swift开发——存储属性与计算属性
|
6天前
|
安全 Android开发 iOS开发
探索Android与iOS开发的差异:平台特性与用户体验的对比分析
在移动应用开发的广阔天地中,Android和iOS两大阵营各据一方。本文将深入探讨这两个操作系统在开发环境、编程语言、用户界面设计及市场分布等方面的主要区别。通过比较分析,我们将揭示各自平台的特有优势,并讨论如何根据目标受众和业务需求选择适合的开发平台。
|
6天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【6月更文挑战第14天】本文将深入探讨iOS开发领域的新星——SwiftUI框架。我们将从其设计理念出发,逐步解析其结构与核心组件,并通过实例展示如何利用SwiftUI简化界面构建流程,提升开发效率。同时,我们也将讨论SwiftUI在现有项目中的集成策略及其对iOS应用开发未来的可能影响。
16 1