1

몇 개의 버튼이 있습니다. 버튼 중 하나를 누르면 팝업되고 alertView는 사용자에게 사진을 찍거나 카메라 롤에서 선택하라는 메시지를 표시합니다. 이제 내가 가지고있는 문제는 12 개의 버튼과 12 개의 UIImageView가 있다는 것입니다. 모든 단추에는 경고가 표시되고 사용자가 옵션 중 하나를 선택할 수있는 자체 작업이 있습니다. 이제 didFinishPickingMediaWithInfo 메서드에서 카메라 또는 카메라 롤의 이미지를 첫 번째 imageView로 전달합니다. 이 모든 잘 작동하지만 다른 단추를 사용하여 다른 경고를 발생시키는 단추 2를 선택하려면 imageView 2 등을 설정해야합니다 (imageView1을 대체하지 않음). didFinishPickingMediaWithInfo에서 경고를 팝업 한 버튼 선택에 따라 설정할 imageView를 구별 할 방법이 필요합니다. 왜냐하면 현재 해당 이미지를 설정해야하는 다른 버튼을 선택하면 첫 번째 이미지보기가 설정되고 재설정되기 때문입니다.UIImagePicker가 두 개 이상의 이미지보기를 설정했습니다.

버튼에 대한 동작을 강조합니다.

-(IBAction) addPhoto1:(id) sender { 

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Image Source" message:@"Take a photo or select a previously taken photo" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Take Photo", @"Select Photo", nil]; 
    [alert show]; 
    alert.tag = 101; 
    [alert release]; 

} 

그리고 경고 clickedButtonAtIndex : 이제 분명히이 올바른 imageViews 이미지를 설정하는 가장 좋은 방법은 버튼을 기반으로 무슨 옳지 않다

-(void) imagePickerController:(UIImagePickerController *) picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { 

     UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
     NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

     ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 


     [library writeImageToSavedPhotosAlbum:[image CGImage] metadata:dict completionBlock:nil]; 


     if (addFirstImage.tag == 1001) { 
      firstImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
      firstImage.layer.cornerRadius = 5; 
      firstImage.layer.masksToBounds = YES; 

     } 
     if (addSecondImage.tag == 1002) {    
      secondImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
      secondImage.layer.cornerRadius = 5; 
      secondImage.layer.masksToBounds = YES; 

     } 
    } 
} 

: 여기

- (void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 

    if (alert.tag == 101) { 

     if (buttonIndex == 1) { 
      //Take photo 
      [self performSelector:@selector(takePicture:) withObject:nil afterDelay:0.0]; 
     } 
     else if (buttonIndex == 2){ 
      //Camera roll 
      [self performSelector:@selector(pictureAlbum:) withObject:nil afterDelay:0.0]; 
     } 
     else if (buttonIndex == 0) { 
      NSLog(@"Cancel"); 
     } 
    } 
} 

그리고는 didFinishPickingMediaWithInfo입니다 원래 눌려진 경고에서?

많은 감사

답변

0

왜 처음 눌러 진 버튼 '기억'에 '액션의'보낸 사람을 사용하지 않는을 (addFirstImage 및 addSecondImage이 두 버튼은 IB를 통해 연결되어 있습니다)? 같은 인덱스 주문 사용 IBOutletCollections, 그런 다음

@property (...) IBOutletCollection(UIButton) allYourButtons; 

@property (...) IBOutletCollection(UIImageView) allYourImageViews; 
// I suppose that both Collections objects have 'tags' (set in XIB file) 
// a UIButton and the corresponding UIImageVIew have the SAME tag 

@property (...) NSInteger clickedButtonIndex; 

- (IBAction) imageViewWasPressed:(id)sender 
{ 
    //keep a reference to the specific button that launched the action 
    self.clickedButtonIndex = [(UIButton *)sender tag]; 

    [self presentAlertViewForPictureChoice]; 
} 

, 당신은 ... allYourImageViews에서있는 UIImageView에 그 이미지를 업데이트해야 찾기 위해 UIAlertView 위임 방법에

- (UIImageView *)imageToUpdateForSelectedIndex:(NSInteger)anIndex 
{ 
    UIImageView *result = nil; 
    for (UIImageView *imageView in self.allYourImageViews){ 
     if(imageView.tag == anIndex){ 
      result = imageView; 
      break; 
     } 
    } 
    return result; 

} 

(EDIT를 clickedButtonIndex를 사용) UIImageView를 사용하여 UIButton을 연결하는 또 다른 방법은 하위 클래스를 만드는 것입니다.

// a new UIButton subclass 

ButtonWithImageView : UIButton 

@property (...) IBOutlet UIImageView *relatedImageView; 

//IBOutlet enables you to directly link a Button with its imageVIew in your XIB 

// in your controller 

@property (...) ButtonWithImageView *selectedButton; 


- (IBAction)buttonWasPressed:(id)sender 
{ 
    ... 
    self.selectedButton = (ButtonWithImageView *)sender; 

} 

그런 다음 당신이해야 할 내가이 작업을 수행하는 방법을 알아 냈 확인 self.selectedButton.relatedImageView

+0

Humm 확실하지 않습니다. 단지 버튼을 눌러서 didfinishpickingmediawithinfo에서 올바른 이미지보기를 설정했는지 알 수있는 방법이 필요합니다. if (action1이 실행 된 경우)와 유사하고 (action2가 실행 된 경우) 이미지보기 1을 설정 한 다음 이미지보기 2를 설정하는 등의 작업을 수행합니다. –

0

편집 할 수 있습니다. 첫째로 나는 다음 태그 번호와 내 모든 버튼 태그

int myTag; 

인터페이스 파일에 myTag라는 바르의 INT를 만들어 즉 button1.tag = 1001

나는 다음의 viewDidLoad에서, (제 12 개 버튼에 대한 1012) 각 버튼마다 12 개의 액션을 생성했습니다. IB를 통해이 모든 행동을 연결하십시오.

- (IBAction)takePhoto:(UIButton*)sender { 

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Image Source" message:@"Take a photo or select a previously taken photo" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Take Photo", @"Select Photo", nil]; 
[alert show]; 
alert.tag = 101; 
[alert release]; 

if (sender.tag == 1001){ 

    NSLog(@"You clicked button 1"); 
    myTag = 1001; 

} 

if (sender.tag == 1002){ 

    NSLog(@"You clicked button 2"); 
    myTag = 1002; 
} 

}

나는 다음을 누르면 무슨 버튼을 감지하고 민트의 바르에

다음 내 didFinishPickingMediaWithInfo 내가 이렇게을 int 값을 전달합니다!

if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { 

    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 


    [library writeImageToSavedPhotosAlbum:[image CGImage] metadata:dict completionBlock:nil]; 

    if (myTag == 1001){ 


     firstImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
     firstImage.layer.cornerRadius = 5; 
     firstImage.layer.masksToBounds = YES; 

    } 

    if (myTag == 1002) { 
     secondImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
     secondImage.layer.cornerRadius = 5; 
     secondImage.layer.masksToBounds = YES; 
    } 





    [picker dismissModalViewControllerAnimated:YES]; 

} 

모두 완벽하게 작동합니다! 그래도 많은 도움을 주셔서 감사합니다!

관련 문제