2012-05-05 2 views
3

버튼을 눌렀을 때 스토리 보드에서 새로운 UIView를로드하는 코드가 있습니다. goPressed 함수는 눌려진 버튼에서 시작되고 selectImage 함수를 호출합니다. selectImage는 UIImagePickerController를 열고 사용자가 사진을 선택할 수있게합니다. 사용자가 사진을 선택하면 didFinishPickingMediaWithInfo 대리자가 선택한 이미지를 UIImageView에 추가합니다.performSegueWithIdentifier가 작동하지 않습니다.

'goPressed'에서 selectImage가 수행 된 후에는 // 1과 같은 주석으로 Segue를 수행해야합니다. 그러나 아무 일도 일어나지 않습니다. performSegueWithIdentifier가 작동하지 않는 것 같습니다. performSegueWithIdentifier를 호출하기 전에 [self selectImage]를 호출하지 않으면 작동합니다. 다음은 코드입니다.

- (IBAction)goPressed:(id)sender { 
    [self selectImage]; 
    [self performSegueWithIdentifier:@"lastView" sender:currentSender]; //1 
} 
-(void)selectImage 
{ 
    // Create image picker controller 
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 

    // Set source to the camera 
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

    // Delegate is self 
    imagePicker.delegate = (id)self; 

    // Allow editing of image ? 
    imagePicker.allowsEditing=NO; 


    // Show image picker 
    [self presentModalViewController:imagePicker animated:YES]; 


} 

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    // Access the uncropped image from info dictionary 
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    [[picker presentingViewController] dismissModalViewControllerAnimated:YES]; 


    lePreview.image= image; 


} 

performSegueWithIdentifier가 작동하지 않는 이유는 무엇입니까? 나는 당신이 필요로하는 어떤 정보라도 놓치지 않기를 바란다.

답변

13

나는 당신이 섹스를하기 직전에 얻은 그림을 사용하려고하고 있다고 생각하고 있습니까? 그들이 이미지 피커에서 취소하면 여전히 segue하고 싶습니까?

그림이 필요한 경우 위임자가 "피킹 완료"라고 말한 후 구획을 호출해야합니다.

SEGUE 인해 애니메이션이 아직 여기에서 발생하는 일 수 있습니다 발사하지와 문제 :

[[picker presentingViewController] dismissModalViewControllerAnimated:NO]; 

을하거나 애니메이션을 유지하려는 경우, 이동 :

[[picker presentingViewController] dismissModalViewControllerAnimated:YES]; 

당신이 시도 할 수 즉 N 않는 경우

[self dismissModalViewControllerAnimated:YES completion:^() { 
[self performSegueWithIdentifier:@"lastView" sender:self]; 
}]; 

또는 다음에 SEGUE 방법 "선택기 마무리했다"그것은이 방법을 OT 작업은 pickerdidfinish 방법이 접근 방식 (참고 시도 -이가 아닌 모달 뷰 자체 모달 뷰를 호출하는 컨트롤러의 대리자로 구현되어야한다 : 나는 자주 전환을 사용

//maintain the animation 
[self dismissModalViewControllerAnimated:YES]; 

//slight pause to let the modal page dismiss and then start the segue 
double delayInSeconds = 0.5; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 

    //code to be executed on the main queue after delay 

    [self performSegueWithIdentifier:@"lastView" sender:self]; 

}); 

을하고는한다 모달보기를 사용하여 멋진 드롭을 한 다음 세그 뷰에서 슬라이드하면 일시 중지로 인해 전환이 자연스럽게 보입니다. 내가 dismissModalViewControllerAnimated 설정할 때

+0

당신은, 그것은 작동 내 포인트를 가지고 : NO를 ...하지만 난 애니메이션을 유지하기 위해 코드를 사용하는 경우, 엑스 코드는 나에게이 오류 제공 : 는 "인스턴스 메시지의 UIView는 선택과 방법을 선언하지 않습니다 dismissmodalviewcontrolleranimated : completion " –

+0

오케이, 새로운 코드를 주사 해주세요. 애니메이션이 각 부분 사이에서 완료되도록 약간의 타임 아웃을 제공합니다. – CocoaEv

+0

어, 이건 못 생겼어! (당신의 솔루션은 아니지만, segue 애니메이션이이 문제를 일으키는 방법). 가장 쉽고 깨끗한 방법은 애니메이션을 비활성화하는 것입니다. 고마워, +1 :) – Jimmy

관련 문제