Swift - 使用导航条和导航条控制器来进行页面切换
通过使用导航条(UINavigationBar)与导航条控制器(UINavigationController)可以方便的在主页面和多层子页面之间切换。下面通过一个简单“组件效果演示”的小例子来说明如何通过代码来进行页面的切换。

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import UIKit@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { // Override point for customization after application launch. // 把起始ViewController作为导航控件封装,我们在ViewController里就能调用导航条进行页面切换了 var rootViewController = ViewController() var rootNavigationController = UINavigationController(rootViewController: rootViewController) self.window!.rootViewController = rootNavigationController return true } func applicationWillResignActive(application: UIApplication) { } func applicationDidEnterBackground(application: UIApplication) { } func applicationWillEnterForeground(application: UIApplication) { } func applicationDidBecomeActive(application: UIApplication) { } func applicationWillTerminate(application: UIApplication) { }} |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
import UIKitclass ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // 表格加载 var tableView:UITableView? // 控件类型 var ctrls = ["UILabel", "UIButton", "UIImageView", "UISlider", "UIWebView"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.title = "Swift控件演示" self.tableView = UITableView(frame:self.view.frame, style:UITableViewStyle.Plain) self.tableView!.delegate = self self.tableView!.dataSource = self self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell") self.view.addSubview(self.tableView!) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } // UITableViewDataSource协议方法 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.ctrls.count } // UITableViewDataSource协议方法 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("SwiftCell", forIndexPath:indexPath) as UITableViewCell cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator cell.textLabel?.text = self.ctrls[indexPath.row] return cell } // UITableViewDelegate协议方法,点击时调用 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath!) { // 跳转到detailViewController,取消选中状态 self.tableView!.deselectRowAtIndexPath(indexPath, animated: true) // 创建DetailViewController var detailViewController = DetailViewController() // 传递控件的title,在detailView里用于判断生成响应的控件 detailViewController.title = self.ctrls[indexPath.row] // navigationController跳转到detailViewController self.navigationController!.pushViewController(detailViewController, animated:true) }} |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
import UIKitclass DetailViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //设置背景色 self.view.backgroundColor = UIColor.whiteColor() //按title加载控件 loadControl(self.title!) //设置代码和控件展示切换按钮,增加到导航条的右侧 //这里采用了navigationController不能增加navigationItem let btn = UIBarButtonItem(title:"代码", style: UIBarButtonItemStyle.Bordered, target: self, action: "btnCodeClicked:") self.navigationItem.rightBarButtonItem = btn } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //构建控件并加载到界面 func loadControl(ctrl:String) { switch (ctrl) { case "UILabel": let label = UILabel(frame: self.view.bounds) label.backgroundColor = UIColor.clearColor() label.textAlignment = NSTextAlignment.Center label.font = UIFont.systemFontOfSize(36) label.text = "Hello, Ucai" self.view.addSubview(label) case "UIButton": var button = UIButton(frame: CGRectMake(110,120,100,60)) button.backgroundColor = UIColor.blueColor() button.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal) button.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Highlighted) button.setTitle("点击我", forState: .Normal) button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) self.view.addSubview(button) case "UIImageView": var image = UIImage(named: "swift.png") var imageView = UIImageView(frame: CGRectMake((CGRectGetWidth(self.view.bounds) - image!.size.width) / 2.0, 120.0, image!.size.width, image!.size.height)) imageView.image = image! self.view.addSubview(imageView) case "UISlider": let slider = UISlider(frame:CGRectMake(60.0, 120.0, 200.0, 30.0)) self.view.addSubview(slider) case "UIWebView": var webView = UIWebView(frame:self.view.bounds) var request = NSURLRequest(URL: url!) webView.loadRequest(request) self.view.addSubview(webView) default: println("control name: \(ctrl)") } } //显示控件的代码 func loadCode(ctrl:String) { var str:String switch (ctrl) { case "UILabel": str = "let label = UILabel(frame: self.view.bounds)\n" str += "label.backgroundColor = UIColor.clearColor()\n" str += "label.textAlignment = NSTextAlignment.Center\n" str += "label.font = UIFont.systemFontOfSize(36)\n" str += "label.text = \"Hello, Ucai\"\n" str += "self.view.addSubview(label)" case "UIButton": str = "UIButton" case "UISlider": str = "let slider = UISlider(frame:CGRectMake(60.0, 120.0, 200.0, 30.0))\n" str += "self.view.addSubview(slider)" default: str = "other ctrl" } //在导航条下方位置显示源代码 var txt = UITextView( frame: CGRectMake(0, 60, self.view.bounds.size.width, self.view.bounds.size.height - 60)) txt.text = str self.view.addSubview(txt) } //清空所有子视图 func clearViews() { for v in self.view.subviews as [UIView] { v.removeFromSuperview() } } func buttonClicked(sender:AnyObject) { println("you clicked button") } //显示控件的代码 func btnCodeClicked(sender:AnyObject) { println("title: \(self.title)") clearViews() if self.navigationItem.rightBarButtonItem!.title == "代码" { loadCode(self.title!) self.navigationItem.rightBarButtonItem!.title = "效果" } else { self.navigationItem.rightBarButtonItem!.title = "代码" loadControl(self.title!) } } /* func btnBackClicked(sender:AnyObject) { self.navigationController.navigationBar.popNavigationItemAnimated(true) } */} |
如果使用StoryBoard实现更加简单
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// UITableViewDelegate协议方法,点击时调用func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath!){ // 跳转到detailViewController,取消选中状态 self.tableView!.deselectRowAtIndexPath(indexPath, animated: true) //更具定义的Segue Indentifier进行跳转 self.performSegueWithIdentifier("detail", sender: self.ctrls[indexPath.row])} //在这个方法中给新页面传递参数override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "detail"{ let controller = segue.destinationViewController as! DetailViewController controller.title = sender as? String }} |
Swift - 使用导航条和导航条控制器来进行页面切换的更多相关文章
- [Swift通天遁地]九、拔剑吧-(8)创建气泡式页面切换效果
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Swift - 使用导航条和导航条控制器来进行页面切换并传递数据
转自:http://www.hangge.com/blog/cache/detail_586.html
- 控制器隐藏了导航 下页pop 导航位置看到黑条
控制器隐藏了导航 下页pop 导航位置看到黑条 解决: -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear ...
- iOS WKWebView 加载进度条、导航栏返回&关闭 (Swift 4)
导航: 1.加载进度条 2.导航栏增加返回.关闭按钮 加载进度条 效果图 代码如下: self.progressView.trackTintColor = UIColor.white self.pro ...
- iOS:导航栏的工具条和导航条
功能:用NAV视图控制器打开新的视图,默认工具条和导航条隐藏,双击显示之 // // main.m // Hello // // Created by lishujun on 14-8-28. // ...
- Bootstrap如何实现导航条?导航条实例详解
本文主要和大家分享Bootstrap实现导航实例详解,在建设一个网站的时候,不同的页面有很多元素是一样的,比如导航条.侧边栏等,我们可以使用模板的继承,避免重复编写html代码.现在我们打算实现一个在 ...
- Bootstrap学习-导航条-分页导航
1.导航条基础 导航条(navbar)和上一节介绍的导航(nav),就相差一个字,多了一个“条”字.其实在Bootstrap框架中他们还是明显的区别.在导航条(navbar)中有一个背景色.而且导航条 ...
- 15 Flutter BottomNavigationBar自定义底部导航条 以及实现页面切换 以及模块化
效果: /** * Flutter BottomNavigationBar 自定义底部导航条.以及实现页面切换: * BottomNavigationBar是底部导航条,可以让我们定义底部Tab ...
- ios swift 实现饼状图进度条,swift环形进度条
ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...
随机推荐
- django学习之Model(一)
认认真真学Django,从现在开始. 学习资料来源于官方网站:https://docs.djangoproject.com/en/1.6/ 1-新建一个models.py from django.db ...
- 【项目分析】利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码
原文:[项目分析]利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码 最近正在进行项目服务的移植工作,即将JAVA服务的程序移植到DotNet平台中. 在JAVA程 ...
- or1200构建sopc系统之软件环境搭建
使用预先编译好的工具链 下载: ftp://ocuser:oc@195.67.9.12/toolchain/or32-elf-linux-x86.tar.bz2 解压 tar xjf or32-elf ...
- POJ 3090 Visible Lattice Points 欧拉函数
链接:http://poj.org/problem?id=3090 题意:在坐标系中,从横纵坐标 0 ≤ x, y ≤ N中的点中选择点,而且这些点与(0,0)的连点不经过其它的点. 思路:显而易见, ...
- (step6.1.5)hdu 1233(还是畅通工程——最小生成树)
题目大意:输入一个整数n,表示有n个村庄,在接下来的n*(n-1)/2中,每行有3个整数beigin.end.weight,分别表示路的起始村庄,结束村庄和村庄之间的距离. 求索要修的路的最短距离 解 ...
- hdu 2546 饭卡 01背包
先将前n-1个从小到大排序.对m-5进行01背包.然后答案就是m-dp[m-5]-a[n-1] 至于为什么最后减去最贵的菜品,而不是把最贵的菜品也放到01背包里呢, 由于假设能够把最贵菜品a[n-1] ...
- C# - MemoryStream
代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...
- Java 自定义日志写入
/** * 将信息写入到日志 * @param content * @return * @throws IOException */ public static boolean writeLog(St ...
- jquery 中获取URL参数的方法
今天写项目需要获取url后面的参数ref参数来判断是否开启计时器来刷新页面,之前一直都是用JS写的,今天在查资料的时候看到了一款JQ的插件 项目地址:https://github.com/allmar ...
- check————身份证
-- Access 不支持 Substring 查询,可以替换为 mid 查询. select 序号,姓名,身份证号,性别from 身份表where (len(身份证号)<>15 and ...