ios在判断设备是ipad_Swift - 判断设备类型开发兼容的iOS应用(iPad使用分隔视图控制器)...

本文介绍了如何在Swift中利用UISplitViewController为iPad开发应用。内容包括如何根据设备类型(iPhone/iPad)适配UI,使用SplitViewController在横屏下展示导航列表和详细信息,以及在竖屏下的特殊处理。同时,文章提供了代码示例,展示了如何在用户点击列表项时在iPad上直接展示详情,而在iPhone上则通过导航控制器跳转。
摘要由CSDN通过智能技术生成

1、分割视图控制器(UISplitViewController)

在iPhone应用中,使用导航控制器由上一层界面进入下一层界面。

但iPad屏幕较大,通常使用SplitViewController来实现导航(这个是iPad专用的视图控制器)。在横屏下,左侧显示一个导航列表,点击后右边显示对应的详情。竖屏情况下显示方式会有所不同,默认只显示详细面板,原来左侧的导航列表会通过浮动窗口隐藏,需要从边缘向内拖动来显示。

2、开发兼容的iOS应用

有时候需要开发兼容iPhone、iPod、iPad的应用,这时候需要判断设备类型,如果是iPhone、iPod就不应该使用SplitViewController。另外处理方式也会有变化,如点击列表项时,在iPad直接在右侧展示详情,而iPhone却需要导航到详细页。

iOS提供了UIDevice类来判断设备的类型,其userInterfaceIdiom属性返回设备类型枚举

效果:

fcb9dd7ce785

image.png

iPad:(注:iPad要旋转成横屏,竖屏下一片空白)

代码:

SceneDelegate

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

// Override point for customization after application launch.

self.window!.backgroundColor = UIColor.white

//初始化列表面板

let master = MasterViewController()

//初始化详情面板

let detail = DetailViewController()

//设置列表面板引用详情面板,以便用户点击列表项时调用详情面板的相应方法

master.detailViewController = detail

//用导航包装master列表,显示导航条,如果是分割面板也不影响功能

let nav = UINavigationController(rootViewController: master)

// 如果是iPhone或iPod则只显示列表页,如果是iPad则显示分割面板

if (UIDevice.current.userInterfaceIdiom == .phone) {

self.window!.rootViewController = nav

}

else {

//初始化分割面板

let split = UISplitViewController()

//设置分割面板的2个视图控制器

split.viewControllers = [nav, detail]

//分割面板作为window的主视图加载

self.window!.rootViewController = split

}

guard let _ = (scene as? UIWindowScene) else { return }

}

MasterViewController

import UIKit

class MasterViewController: UIViewController {

// 表格加载

var tableView:UITableView?

// 控件类型

var ctrls = ["UILabel", "UIButton", "UIImageView", "UISlider"]

//

var detailViewController:DetailViewController?

override func viewDidLoad()

{

super.viewDidLoad()

self.title = "Swift控件演示"

self.tableView = UITableView(frame:self.view.frame, style:UITableView.Style.plain)

self.tableView!.delegate = self

self.tableView!.dataSource = self

self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")

self.view.addSubview(self.tableView!)

}

}

extension MasterViewController: UITableViewDelegate, UITableViewDataSource

{

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return self.ctrls.count;

}

// UITableViewDataSource协议方法

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

{

let cell = tableView.dequeueReusableCell(withIdentifier: "SwiftCell",

for: indexPath)

cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator

cell.textLabel?.text = self.ctrls[indexPath.row]

return cell

}

// UITableViewDelegate协议方法,点击时调用

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

{

//调用DetailViewController的方法更新详细页

detailViewController!.loadControl(ctrl: self.ctrls[indexPath.row])

//如果是iPhone、iPod则导航到详情页

if (UIDevice.current.userInterfaceIdiom == .phone) {

// 跳转到detailViewController,取消选中状态

//self.tableView!.deselectRowAtIndexPath(indexPath, animated: true)

// navigationController跳转到detailViewController

self.navigationController!.pushViewController(detailViewController!, animated:true)

}

}

}

DetailViewController

import UIKit

class DetailViewController: UIViewController

{

override func viewDidLoad() {

super.viewDidLoad()

self.view.backgroundColor = UIColor.white

let ctrl = self.title != nil ? self.title! : ""

loadControl(ctrl: ctrl)

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

}

func loadControl(ctrl:String) {

clearViews()

switch (ctrl) {

case "UILabel":

let label = UILabel(frame: self.view.bounds)

label.backgroundColor = UIColor.clear

label.textAlignment = NSTextAlignment.center

label.font = UIFont.systemFont(ofSize: 36)

label.text = "Hello, 小驴拉磨"

self.view.addSubview(label)

case "UIButton":

let button = UIButton(frame: CGRect(x:110,y:120,width:100,height:60))

button.backgroundColor = UIColor.blue

button.setTitleColor(UIColor.red, for: UIControl.State.normal)

button.setTitleColor(UIColor.white, for: UIControl.State.highlighted)

button.setTitle("点击我", for: .normal)

self.view.addSubview(button)

default:

print("clicked: \(ctrl)")

}

}

func clearViews() {

for v in self.view.subviews {

v.removeFromSuperview()

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值