2014-09-12 16 views
0

我有一個觀點,有四個UIButtons。當每個按鈕被調用時,它彈出照片庫供用戶選擇一個圖像設置爲按鈕圖像(將其視爲設置配置文件圖像)。這是我用來做這個的代碼。如何使用didFinishPickingMedia與多個UIImages

func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]!) { 


    let image = info[UIImagePickerControllerOriginalImage] as UIImage 
    pickedImage = image 

    p1ImageButton.setImage(pickedImage, forState: UIControlState.Normal) 

    self.dismissViewControllerAnimated(true, completion: nil) 


} 

@IBAction func p1PhotoTapped(sender: AnyObject) { 
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary){ 

     var p1IP = UIImagePickerController() 
     p1IP.delegate = self 
     p1IP.sourceType = UIImagePickerControllerSourceType.PhotoLibrary; 

     p1IP.allowsEditing = false 

     self.presentViewController(p1IP, animated: true, completion: nil) 
    } 



} 

這適用於第一張圖片。但是,因爲我使用IPC代理,didFinishingPickingMediaWith,我不知道如何設置其他3個按鈕圖像。如果我點擊其他三個按鈕(分配他們自己的動作),它只是不斷調用這個相同的代表,然後繼續設置圖像到第一個按鈕。

有沒有辦法讓多個委託方法?或者,也許有委託方法檢查某個ImagePickerController?如何讓其他三個按鈕正確設置圖像,任何幫助都很棒。謝謝!

回答

1

您不能擁有多個委託方法,這是塊機制的優勢之一,而不是委託機制。

一對夫婦的想法:

首先,保持一個實例變量上,告訴你哪個圖像設置的UIViewController,然後只需切換依據是:

enum ButtonToSet { 
    case Button1, Button2, Button3, Button4 
} 
var buttonToSet:ButtonToSet? 

@IBAction func p1PhotoTapped(sender:AnyObject) { 
    buttonToSet = .Button1 
    ... 
} 

func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]!) { 

    ... 

    let image = info[UIImagePickerControllerOriginalImage] as UIImage 
    pickedImage = image 

    if let buttonToSet = buttonToSet { 
     switch buttonToSet { 
     case .Button1: 
      p1ImageButton.setImage(pickedImage, forState: UIControlState.Normal) 
     ... 
     } 
    } 

    self.dismissViewControllerAnimated(true, completion: nil) 
} 

或者,創建一個UIButton子,ProfileImageButton通過彈出選擇器本身處理它自己的操作,那麼委託方法已經與正確的按鈕相關聯。

+0

精彩!!你會推薦一種比另一種更好的方法嗎?有沒有一種效率更高或更好? – candidaMan 2014-09-12 16:19:10

+0

我可能會親自採取子類方法,但我希望在可能的情況下保持功能隔離。 – 2014-09-12 16:19:48

+0

太棒了!感謝您的幫助! – candidaMan 2014-09-12 16:42:34