码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发——设备篇Swift篇&判断设备类型

时间:2015-07-23 21:18:00      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

判断设备类型

1,分割视图控制器(UISplitViewController)
在iPhone应用中,使用导航控制器由上一层界面进入下一层界面。
但iPad屏幕较大,通常使用SplitViewController来实现导航(这个是iPad专用的视图控制器)。在横屏下,左侧显示一个导航列表,点击后右边显示对应的详情。竖屏情况下显示方式会有所不同,默认只显示详细面板,原来左侧的导航列表会通过浮动窗口隐藏,需要从边缘向内拖动来显示。
 
2,开发兼容的iOS应用
有时候需要开发兼容iPhone、iPod、iPad的应用,这时候需要判断设备类型,如果是iPhone、iPod就不应该使用SplitViewController。另外处理方式也会有变化,如点击列表项时,在iPad直接在右侧展示详情,而iPhone却需要导航到详细页。
iOS提供了UIDevice类来判断设备的类型,其userInterfaceIdiom属性返回设备类型枚举
 
3,样例效果图
  iPhone:
   技术分享  技术分享
  iPad:
   技术分享
 
4,样例代码
--- AppDelegate.swift 应用入口 ---
 1 import UIKit
 2  
 3 @UIApplicationMain
 4 class AppDelegate: UIResponder, UIApplicationDelegate {
 5                              
 6     var window: UIWindow?
 7  
 8     func application(application: UIApplication,
 9         didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
10         self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
11         // Override point for customization after application launch.
12         self.window!.backgroundColor = UIColor.whiteColor()
13         self.window!.makeKeyAndVisible()
14          
15         //初始化列表面板
16         let master = MasterViewController()
17         //初始化详情面板
18         let detail = DetailViewController()
19         //设置列表面板引用详情面板,以便用户点击列表项时调用详情面板的相应方法
20         master.detailViewController = detail
21         //用导航包装master列表,显示导航条,如果是分割面板也不影响功能
22         let nav = UINavigationController(rootViewController: master)
23         // 如果是iPhone或iPod则只显示列表页,如果是iPad则显示分割面板
24         if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
25             self.window!.rootViewController = nav
26         }
27         else {
28             //初始化分割面板
29             let split = UISplitViewController()
30             //设置分割面板的2个视图控制器
31             split.viewControllers = [nav, detail]
32          
33             //分割面板作为window的主视图加载
34             self.window!.rootViewController = split
35         }
36          
37         return true
38     }
39  
40     func applicationWillResignActive(application: UIApplication) {
41     }
42  
43     func applicationDidEnterBackground(application: UIApplication) {
44     }
45  
46     func applicationWillEnterForeground(application: UIApplication) {
47     }
48  
49     func applicationDidBecomeActive(application: UIApplication) {
50     }
51  
52     func applicationWillTerminate(application: UIApplication) {
53     }
54 }

 


--- MasterViewController.swift 列表页 ---
 1 import UIKit
 2  
 3 class MasterViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
 4      
 5     // 表格加载
 6     var tableView:UITableView?
 7     // 控件类型
 8     var ctrls = ["UILabel", "UIButton", "UIImageView", "UISlider"]
 9     //
10     var detailViewController:DetailViewController?
11      
12     override func viewDidLoad() {
13         super.viewDidLoad()
14         // Do any additional setup after loading the view, typically from a nib.
15          
16         self.title = "Swift控件演示"
17         self.tableView = UITableView(frame:self.view.frame, style:UITableViewStyle.Plain)
18         self.tableView!.delegate = self
19         self.tableView!.dataSource = self
20         self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")
21         self.view.addSubview(self.tableView!)
22     }
23      
24     override func didReceiveMemoryWarning() {
25         super.didReceiveMemoryWarning()
26         // Dispose of any resources that can be recreated.
27     }
28      
29     // UITableViewDataSource协议方法
30     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
31     {
32         return self.ctrls.count
33     }
34      
35     // UITableViewDataSource协议方法
36     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
37         -> UITableViewCell
38     {
39         let cell = tableView.dequeueReusableCellWithIdentifier("SwiftCell",
40             forIndexPath: indexPath) as UITableViewCell
41         cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
42         cell.textLabel?.text = self.ctrls[indexPath.row]
43          
44         return cell
45     }
46      
47     // UITableViewDelegate协议方法,点击时调用
48     func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)
49     {
50         //调用DetailViewController的方法更新详细页
51         detailViewController!.loadControl(self.ctrls[indexPath.row])
52          
53         //如果是iPhone、iPod则导航到详情页
54         if (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
55             // 跳转到detailViewController,取消选中状态
56             //self.tableView!.deselectRowAtIndexPath(indexPath, animated: true)
57          
58             // navigationController跳转到detailViewController
59             self.navigationController!.pushViewController(detailViewController!, animated:true)
60         }
61     }
62 }

 


--- DetailViewController.swift 详情页 ---
 1 import UIKit
 2  
 3 class DetailViewController: UIViewController {
 4      
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
 8          
 9         self.view.backgroundColor = UIColor.whiteColor()
10         let ctrl = self.title != nil ? self.title! : ""
11         loadControl(ctrl)
12     }
13      
14     override func didReceiveMemoryWarning() {
15         super.didReceiveMemoryWarning()
16         // Dispose of any resources that can be recreated.
17     }
18      
19     func loadControl(ctrl:String) {
20         clearViews()
21         switch (ctrl) {
22         case "UILabel":
23             var label = UILabel(frame: self.view.bounds)
24             label.backgroundColor = UIColor.clearColor()
25             label.textAlignment = NSTextAlignment.Center
26             label.font = UIFont.systemFontOfSize(36)
27             label.text = "Hello, Hangge.com"
28             self.view.addSubview(label)
29         case "UIButton":
30             var button = UIButton(frame: CGRectMake(110,120,100,60))
31             button.backgroundColor = UIColor.blueColor()
32             button.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
33             button.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Highlighted)
34             button.setTitle("点击我", forState: .Normal)
35             self.view.addSubview(button)
36         default:
37             println("clicked: \(ctrl)")
38         }
39     }
40      
41     func clearViews() {
42         for v in self.view.subviews {
43             v.removeFromSuperview()
44         }
45     }    
46 }

 

(注意:项目直接新建一个Master-Detail Application,就已经具有同上述一样的兼容iPhone、iPad的二级导航功能)

iOS开发——设备篇Swift篇&判断设备类型

标签:

原文地址:http://www.cnblogs.com/iCocos/p/4671509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!