用Swift语言开发SplitViewController范例

这是一个利用界面工具 Interface builder和Swift开发语言来实现 SplitViewController的初学者教程。当然了,还有一些关于SplitViewController的文章,请查看 nhipster  和 whoisryannystrom

现在我们进入正题:

1.创建一个SingleView(单视图)应用

24122955_ZaUl.jpg

2.选择Swift为开发语言,并为项目命名

24122956_glV4.jpg

3.点击Main.StoryBoard,然后选中默认视图并删除它

24122956_rSOy.jpg

4.从Xcode右下角的Object Library选中SplitViewController并将它拖拽到Main.StoryBoard的面板中

24122956_EChX.jpg

5.使用属性设置将SplitViewController设置为第一个启动的ViewController

24122956_HnzD.jpg

6.把导航栏加入到界面控制器中去,具体做法是:选择Editor->Embed In->Navigation Controller

24122956_Jw7o.jpg

7.将自动生成的 ViewController.swift文件重命名为 DetailViewController.swift 并将类名改变为 DetailViewController

24122956_q748.jpg

8.在界面控制器中将对应类文件的名称从ViewController换为DetailViewController

24122956_jUXx.jpg

9.用Ctrl选中SplitView自动生成的TableView(Root View Controller)的一个Cell,然后将其拖拽到Detail View Controller上去,并在弹出的黑色菜单上选择"Show Detail",这时在RootViewController和DetailViewController中会形成一个连接线,其实这个就是一个Segue,用来导航Controller的,点击这个线并将Identifier的名字设置为showDetailIdentifier,为什么这样做再后期会知道,现在这里就理解为:我们给这个导航过程起了一个名字,为的是在茫茫众多的导航过程(Segue)中找到我们要找的那一个。
201504011323.jpg
201504011326.jpg

10.然后 我们去Root View Controller那里,其实就是一个TableView,然后给TableView的Cel设置一个可复用的ID,如“cellid"

201504011325.jpg

11.随后在项目中创建一个新的CocoaTouch文件
201504011331.jpg

12.并给这个文件命名为"SplitViewController",并将其父类设置为“UISplitViewController”(原文这里的贴图有误导性,暂时就不贴了)

13.然后在SplitViewController.swift这个文件里的viewDidLoad方法中加入如下一行代码:
   
  1. splitViewController?.preferredDisplayMode = .PrimaryOverlay
这行代码是保证TableViewController在DetailViewController之上。你也可以更换其他的设置,此处是一个枚举,源码如下:
   
  1. enum UISplitViewControllerDisplayMode : Int {
  2. case Automatic
  3. case PrimaryHidden
  4. case AllVisible
  5. case PrimaryOverlay
  6. }
201504011407.jpg
在创建一个文件,命名为ListTableViewController 他的父类继承自UITableViewController
201504011409.jpg
然后在故事板中,将对应的Class设置为 ListTableViewController  
201504011424.jpg

随后在DetailView中加一个居中的Label,显示对应的数字用的。
201504011524.jpg
然后在DetailView.swift中给这个Label创建一个实例, IBOutlet  ,代码如下:
   
  1. @IBOutlet var numberLabel:UILabel?
再添加一个属性名为 selectedIndex,这个属性在跳转时会被调用。
   
  1. var selectedIndex:Int = 1
并修改 DetailView.swift的 viewDidLoad  方法,主要作用是给label设置文本属性并给导航栏加入返回按钮
   
  1. override func viewDidLoad() {
  2. super.viewDidLoad()
  3. numberLabel?.text = \(selectedIndex)“
  4. // add back button to the navigation bar.
  5. if splitViewController?.respondsToSelector(“displayModeButtonItem”) == true {
  6. navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem()
  7. navigationItem.leftItemsSupplementBackButton = true
  8. }
  9. }

然后再ListTableView.swift中加入数据源,是一个数组,并且初始化对应的tableview的数据

   
  1. let names = [“One”,“Two”,“Three”,“Four”,“Five”,“Six”,“Seven”,“Eight”,“Nine”,“Ten”] (class level declaration)
  2. // MARK: Table view data source
  3. override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
  4. return 1
  5. }
  6. override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  7. return names.count
  8. }
  9. override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  10. let cell = tableView.dequeueReusableCellWithIdentifier(“CellIdentifier”, forIndexPath: indexPath) as UITableViewCell
  11. cell.textLabel?.text = names[indexPath.row]
  12. return cell
  13. }
然后再加入跳转方法,让选定的tableview的行数在跳转时传入到下一个界面中去

   
  1. override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  2. if (segue.identifier == ShowDetailIdentifier”) {
  3. var detail: DetailViewController
  4. if let navigationController = segue.destinationViewController as? UINavigationController {
  5. detail = navigationController.topViewController as DetailViewController
  6. } else {
  7. detail = segue.destinationViewController as DetailViewController
  8. }
  9. if let path = tableView.indexPathForSelectedRow() {
  10. detail.selectedIndex = path.row + 1
  11. }
  12. }
  13. }
201504011556.jpg

此处下载源码:https://github.com/rshankras/UISplitViewControllerExample





转载于:https://my.oschina.net/t5xgkow/blog/510608

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值