2012-06-01 4 views
0

내 앱에서 사용자가 버튼을 클릭하면 prepareForSegue가 호출됩니다. 앱이 상태를 확인한 다음 쓰기 또는 삭제를 원하는 경우 사용자에게 메시지를 표시해야합니다. 문제는 UIActionSheet가 표시되기 전에 다음보기 컨트롤러를로드한다는 것입니다. prepareForSegue가 호출되기 전에 UIActionSheet를 강제로 표시하려면 어떻게합니까? 이것은 prepareForSegue에 대한 내 논리입니다.prepareForSegue 및 UIActionSheet

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    if ([[segue identifier] isEqualToString:@"mySegue"]) { 

     //Check Logic removed for simplicity 

     if ([myCheck count] > 0){ 


      UIActionSheet *actionSheet = [[UIActionSheet alloc] 
              initWithTitle:@"Save?" 
              delegate:self 
              cancelButtonTitle:@"Delete" 
              destructiveButtonTitle:@"Save" 
              otherButtonTitles:nil]; 
      [actionSheet showFromToolbar:self.navigationController.toolbar]; 


     } 

    } 

} 

다음은 작업 시트입니다.

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
if (buttonIndex == [actionSheet cancelButtonIndex]) 
{ 

    //Delete logic removed 

    }else { 
    //Save logic removed 

} 
} 

답변

1

세그웨이에서는이를 수행 할 수 없습니다. 트리거 할 것으로 예상되는 버튼 인덱스를 얻으면 액션 시트 핸들러에 뷰 컨트롤러를 수동으로로드해야합니다. 즉, segue를 유발하는 요소가 무엇이든지 이제는 연결 시트를 작성하고 표시 할 IBAction을 가리켜 야합니다. prepareForSegue는 대상보기 컨트롤러에 표시하기 전에 매개 변수를 설정할 수 있도록하기위한 것입니다. Segue는 이미 PrepForceue를 준비 할 때까지 동작을 시작했습니다. 이 시점에서, segue의 수행을 취소/지연하는 것은 없습니다.

좋습니다.

+0

감사 할 것 같은 올바른 방법으로되지 않을 수 있습니다, 생각

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == [actionSheet cancelButtonIndex]) return; if (buttonIndex == 0) { [self performSegueWithIdentifier:@"visitWeb" sender:self]; } if (buttonIndex == 1) { if ([MFMailComposeViewController canSendMail]) { 

했다 – Xaphann

0

작업 시트를 만드는 것은 비동기 이벤트이며 segue를 차단하지 않습니다. 액션 시트에서 세그를 트리거해야합니다.

1

액션에서 Segue를 푸시하는 방법 Segue가 View 컨트롤러에서 나오고 여기에 식별자가있는 한 예제가 있습니다. 그 대답은 내가 newb 조금 야하지만 스토리 보드에 내 모달 뷰 컨트롤러는 트릭을