2012-09-08 4 views
2

UIImagePickerControllers (카메라 선택기와 미디어 선택기)를 표시하는 데 사용하는 두 개의 단추가있는보기가 있습니다. 나는 UIImagePickerControllers을 만들 때, 나는 그들에게 diffrent 이름을 지정하고 아래의 코드에서 볼 수 있듯이 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 매개 변수를 얻지 만 항상 메서드 (피커)에서 할당 된 이름을가집니다. 어떤 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

당신도 당신이 대리인에 처리하는 선택기 운동을 수행 할 수 있습니다 - 예를 들어 태그 속성을 검사 - 또는 팝 오버를 운전하고 그것을 ImagePicker의 대리자를 만들 수있는 UIPopoverController 서브 클래스를 만들 수 있습니다. 선택한 정보를 기본 클래스로 다시 전달해야합니다. popoverControllerShouldDismissPopover 대리자 메서드를 구현하고 하위 클래스의 속성을 검사하여이 작업을 수행 할 수 있습니다.