加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift - 使用导航条和导航条控制器来进行页面切换

发布时间:2020-12-14 07:20:59 所属栏目:百科 来源:网络整理
导读:通过使用导航条(UINavigationBar)与导航条控制器(UINavigationController)可以方便的在主页面和多层子页面之间切换。下面通过一个简单“组件效果演示”的小例子来说明如何通过代码来进行页面的切换。 功能如下: 1,在AppDelagete.swift入口文件中把首页
通过使用导航条(UINavigationBar)与导航条控制器(UINavigationController)可以方便的在主页面和多层子页面之间切换。下面通过一个简单“组件效果演示”的小例子来说明如何通过代码来进行页面的切换。

功能如下:
1,在AppDelagete.swift入口文件中把首页ViewController做了导航控件的封装
2,首页是一个表格列出几个Swift控件的名称
3,点击表格项即切换到对应组件展示页面,顶部的导航条标题变为该控件的名称,同时导航条左侧还有返回按钮
4,在展示页中,给导航条右侧添加了“效果/代码”切换的按钮,点击分别展示组件的效果和代码
效果图如下:
代码如下:
--- 入口文件AppDelegate.swift ---
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
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder,UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// 把起始ViewController作为导航控件封装,我们在ViewController里就能调用导航条进行页面切换了
let rootViewController = ViewController()
let 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) {
}
}
--- 主页面ViewController.swift ---
11
12
13
14
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
ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
// 表格加载
tableView:UITableView?
// 控件类型
ctrls = [ "UILabel" , "UIButton" "UIImageView" "UISlider" "UIWebView" ]
override func viewDidLoad() {
super .viewDidLoad()
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!)
func didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// UITableViewDataSource协议方法
func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int
{
return self.ctrls.count
}
// UITableViewDataSource协议方法
-> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier( as UITableViewCell
cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
cell.textLabel?.text = self.ctrls[indexPath.row]
cell
}
// UITableViewDelegate协议方法,点击时调用
{
// 跳转到detailViewController,取消选中状态
self.tableView!.deselectRowAtIndexPath(indexPath,animated: true )
// 创建DetailViewController
let detailViewController = DetailViewController()
// 传递控件的title,在detailView里用于判断生成响应的控件
detailViewController.title = self.ctrls[indexPath.row]
// navigationController跳转到detailViewController
self.navigationController!.pushViewController(detailViewController,monospace!important; min-height:inherit!important">)
}
--- 子页面DetailViewController.swift ---
14
15
16
17
50
51
52
53
54
55
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
DetailViewController: UIViewController {
func viewDidLoad() {
.viewDidLoad()
//设置背景色
self.view.backgroundColor = UIColor.whiteColor()
//按title加载控件
loadControl(self.title!)
//设置代码和控件展示切换按钮,增加到导航条的右侧
//这里采用了navigationController不能增加navigationItem
let btn = UIBarButtonItem(title: "代码" target: self,action: "btnCodeClicked:" )
self.navigationItem.rightBarButtonItem = btn
}
func didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
//构建控件并加载到界面
func loadControl(ctrl: String ) {
switch (ctrl) {
case :
let label = UILabel(frame: self.view.bounds)
.backgroundColor = UIColor.clearColor()
.textAlignment = NSTextAlignment.Center
.font = UIFont.systemFontOfSize( 36 )
.text = "Hello,hangge.com"
self.view.addSubview( )
:
let 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( "点击我" button.addTarget(self,monospace!important; min-height:inherit!important; color:blue!important">"buttonClicked:" forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)
:
let image = UIImage(named: "swift.png" )
let 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)
:
let slider = UISlider(frame:CGRectMake( 60.0 200.0 30.0 ))
self.view.addSubview(slider)
:
let webView = UIWebView(frame:self.view.bounds)
let url = NSURL(string: "http://www.hangge.com" let request = NSURLRequest(URL: url!)
webView.loadRequest(request)
self.view.addSubview(webView)
default :
print( "control name: (ctrl)" )
}
}
//显示控件的代码
func loadCode(ctrl: ) {
str: String
(ctrl) {
:
str = "let label = UILabel(frame: self.view.bounds)n"
str += "label.backgroundColor = UIColor.clearColor()n"
"label.textAlignment = NSTextAlignment.Centern"
"label.font = UIFont.systemFontOfSize(36)n"
"label.text = "Hello,Ucai"n"
"self.view.addSubview(label)"
:
"UIButton"
:
"let slider = UISlider(frame:CGRectMake(60.0,120.0,200.0,30.0))n"
"self.view.addSubview(slider)"
:
"other ctrl"
}
//在导航条下方位置显示源代码
let txt = UITextView(
frame: CGRectMake( 0 ))
txt.text = str
self.view.addSubview(txt)
}
//清空所有子视图
func clearViews() {
for v in self.view.subviews [UIView] {
v.removeFromSuperview()
}
}
func buttonClicked(sender:AnyObject) {
"you clicked button" )
}
//显示控件的代码
func btnCodeClicked(sender:AnyObject) {
"title: (self.title)" )
clearViews()
if self.navigationItem.rightBarButtonItem!.title == {
loadCode(self.title!)
self.navigationItem.rightBarButtonItem!.title = "效果"
}
else {
"代码"
loadControl(self.title!)
}
}
/*
func btnBackClicked(sender:AnyObject) {
self.navigationController.navigationBar.popNavigationItemAnimated(true)
}
*/
}

如果使用StoryBoard实现更加简单
AppDelegate.swift都不需要修改。打开Main.storyboard。
(1)点击首页的Scene,选择Editor -> Embed In -> Navigation Controller 即可。

(2)从首页单元格拖“show”的关联Segue到详细页,或从首页View Controller拖手动关联Segue到详细页

(3)定义上面刚添加的Segue的Indentifier(比如detail)

这样,点击单元格跳转的代码有所改变,是根据刚才定义Segue的Indentifier来跳转
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// UITableViewDelegate协议方法,点击时调用
{
// 跳转到detailViewController,取消选中状态
true )
//更具定义的Segue Indentifier进行跳转
self.performSegueWithIdentifier( "detail" }
//在这个方法中给新页面传递参数
override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {
if segue.identifier == {
let controller = segue.destinationViewController as ! DetailViewController
controller.title = sender ? String
}
}

原文出自: www.hangge.com 转载请保留原文链接: http://www.hangge.com/blog/cache/detail_586.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!