今天我们要简单做一个通过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();
(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. } }
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 。欢迎大家访问!