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

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

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

iOS开发使用Picker View实现一个图片浏览的App_第1张图片


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

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


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

iOS开发使用Picker View实现一个图片浏览的App_第2张图片


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

iOS开发使用Picker View实现一个图片浏览的App_第3张图片


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

iOS开发使用Picker View实现一个图片浏览的App_第4张图片


(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来显示图片。实现代码如下:

iOS开发使用Picker View实现一个图片浏览的App_第5张图片


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

iOS开发使用Picker View实现一个图片浏览的App_第6张图片


iOS开发使用Picker View实现一个图片浏览的App_第7张图片


iOS开发使用Picker View实现一个图片浏览的App_第8张图片


iOS开发使用Picker View实现一个图片浏览的App_第9张图片


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

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  。欢迎大家访问!

你可能感兴趣的:(ios,xcode,swift,数据传输,Picker,View控件)