您的位置:首页 > 移动开发

iOS开发使用Picker View实现一个图片浏览的App

2015-07-29 17:06 645 查看
      今天我们要简单做一个通过Picker View控件的选择,然后在另一个界面显示图片的App。主要模块由两部分,即Picker View控件的使用,以及两个界面间的数据传递。

(1)在第一个界面中拖入一个Picker View控件(有点像Date Picker),用来滚动选择图片的名称;在第二个界面中拖入一个ImageView.用来根据第一个界面传入的数据显示不同的图片。界面布局如下:




(2)拖入几张照片到images.xcassets中,用来显示,本文使用5张照片。

(3)在ViewController.swift中为需要在Picker View中显示的文字建立一个数组,具体如下:




(3)新建一个swift文件,作为第一个界面ViewController.swift的扩展,用来实现2个Picker View的Protocol,(可以理解为实现接口)。两个Protocol分别为:UIPickerViewDataSource;UIPickerViewDelegate。具体代码如下:




(4)绑定Picker View控件到代码中,并且在viewDidLoad中绑定刚才实现的数据源和代理;




(5)实现完以上步骤后,运行程序,发现Picker View已经可以正常使用,并能显示数组中的文本;




(6)在进行界面跳转的时候需要传递数据,要用到prepareForSegue方法。可以先指定Storyboard Segue的Identifier为:“GoToGallery”。为什么一定要指定Identifier。因为同一个界面可能要跳到多个不同的界面,所以会有不同的Segue。方法实现如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

if segue.identifier == "GoToGallery"{

let index = picPicker.selectedRowInComponent(0)

var imageName:String?
switch index{

case 0:
imageName = "gugong"
break

case 1:
imageName = "tiantan"
break

case 2:
imageName = "shuilifang"
break

case 3:
imageName = "niaochao"
break

case 4:
imageName = "tiananmen"
break

default :
imageName = nil
}

var vc = segue.destinationViewController as! GalleryViewController
vc.imageName = imageName

}//if;
}//prepareForSegue();


(7)在第二个界面的中如何进行获取呢?声明一个全局的变量imageName,然后根据这个imageName来显示图片。实现代码如下:




(8)经过上述步骤后,实现效果如下:













下面附上几个重要类的所有代码:

ViewController.swift:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var picPicker: UIPickerView!

let pic = ["故宫","天坛","水立方","鸟巢","天安门"]

override func viewDidLoad() {
super.viewDidLoad()

picPicker.dataSource = self
picPicker.delegate = self

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

if segue.identifier == "GoToGallery"{

let index = picPicker.selectedRowInComponent(0)

var imageName:String?
switch index{

case 0:
imageName = "gugong"
break

case 1:
imageName = "tiantan"
break

case 2:
imageName = "shuilifang"
break

case 3:
imageName = "niaochao"
break

case 4:
imageName = "tiananmen"
break

default :
imageName = nil
}

var vc = segue.destinationViewController as! GalleryViewController
vc.imageName = imageName

}//if;
}//prepareForSegue();

//Unwind Segue
@IBAction func close(segue:UIStoryboardSegue){

print("closed")
}

}//ViewController()


GalleryViewController.swift:

import UIKit

class GalleryViewController: UIViewController {

@IBOutlet weak var beautyImage: UIImageView!

var imageName:String?

override func viewDidLoad() {
super.viewDidLoad()

if imageName != nil{

beautyImage.image = UIImage(named: imageName!)
}

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}


ViewControllerExtension.swift:

import UIKit

//新建ViewControllerExtension.swift,作为第一个界面ViewController的扩展;
extension ViewController: UIPickerViewDataSource{

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{

return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{

return pic.count
}
}

extension ViewController: UIPickerViewDelegate{

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!{

return pic[row]
}
}


github主页:https://github.com/chenyufeng1991  。欢迎大家访问!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: