2012-09-08 42 views
2

不同拾取器我有一對夫婦whick我使用以呈現UIImagePickerControllers(相機和介質拾取器)的按鈕的圖。當我創建了UIImagePickerControllers,我給他們指出錯誤的名字和modaly呈現出來,你可以在下面的代碼中看到:識別的UIImagePickerController委託

- (void) startMediaBrowserFromViewControllerForBGImage { 
    UIImagePickerController * mediaUIForBGImage = [[UIImagePickerController alloc]init]; 
    //i also set a bunch of different settings here, but it doesn't matter for this purpose 
    mediaUIForBGImage.delegate = self; 
    [self presentModalViewController: mediaUIForBGImage animated:YES]; 
} 

現在,你還可以在代碼中看到的,我委託設置爲self,那是我對所有UIImagePickerControllers所做的,但問題是 - 在委託方法中,我如何知道哪個UIImagePickerController調用了委託方法。因爲我需要對媒體採取的操作對於每個UIImagePickerControllers都不同。在委託方法中,我獲得UIImagePickerController參數,但它始終具有從方法(picker)分配的名稱。我能用什麼來知道哪個UIImagePickerController引用?

回答

2

我想你可以存儲到每個挑選的引用,然後檢查它是否是相同的實例。雖然我會質疑使用多個不同的選擇器實例,但是您可以配置單個實例嗎?此外,它們在任何配置中返回的結果都幾乎相同,因此您可以針對特定需求調查結果字典。

self.oneImagePicker = [UIImagePickerController ...] 
self.twoImagePicker = [UIImagePickerController ...] 

//In delegate 
if ([self.oneImagePicker isEqual:picker]) ... 
+0

是的,但每個選擇器都會返回一個用於不同目的的圖像,我需要在其他位置保存一些圖像。我如何比較選擇器實例? – byteSlayer

+0

在答案中添加了代碼 –

2

一個解決方法可能是這樣的:

如果你設置你的各種採摘,發送到委託方法將包括導致該委託方法火拾取器的參數之一的「tag」值,如果你看看它的「tag」值,你就會知道它是哪個選擇器。

另一種解決方案可能是將每個選擇器設置爲ivar或屬性,然後比較發送給委託方法的選擇器參數以查看哪個等於哪個ivar或屬性(即對象地址是否相同?)。

+0

我可以簡單地將採摘的「標籤」屬性,以任何我想要做到這一點? – byteSlayer

+0

只要它是一個整數,然後是... –

+0

嗯,我試圖做的,但的UIImagePickerController沒有一個標記屬性... – byteSlayer

0

您可以鍛鍊你正在處理中委託其選擇器 - 檢查例如標籤屬性 - 或者創建一個UIPopoverController子類來驅動你的酥料餅,並使其成爲ImagePicker的代表。它需要將選定的信息回傳給了主類 - 你可以通過實現popoverControllerShouldDismissPopover委託方法,並檢查你的子類的屬性

相關問題