0

私のアプリでは、ユーザーがボタンをクリックすると、prepareForSegue が呼び出されます。アプリは状態を確認し、上書きまたは削除するかどうかをユーザーに確認する必要があります。問題は、UIActionSheet が表示される前に次の View Controller をロードすることです。prepareForSegue が呼び出される前に UIActionSheet を強制的に表示するにはどうすればよいですか? これが私の prepareForSegue のロジックです。

-(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

}
}
4

3 に答える 3

1

セグエでそれを行うことはできません。ビュー コントローラーをトリガーするはずのボタン インデックスを取得したら、アクション シート ハンドラーでビュー コントローラーを手動で読み込む必要があります。つまり、セグエをトリガーしているものはすべて切断し、アクション シートを作成して表示する IBAction を指す必要があります。prepareForSegue は、目的のビュー コントローラを表示する前にパラメータを設定できるようにすることを目的としています。セグエの準備ができるようになるまでに、セグエはすでに開始されています。その時点で、セグエの実行を戻す/キャンセルする/遅らせることはありません。

よろしくお願いします。

于 2012-06-01T20:11:37.430 に答える
1

セグエがビューコントローラーからのものである限り、アクションシートからセグエを実行することが可能であることがわかりました。ここでの識別子は例です。

- (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])
        {

私は少し初心者なので正しい方法ではないかもしれませんが、StoryBoardのモーダルビューコントローラーではうまくいくようです

于 2012-12-29T20:54:56.627 に答える
0

アクション シートの作成は非同期イベントであり、セグエをブロックしません。アクション シートからセグエをトリガーする必要があります。

于 2012-06-01T21:38:58.270 に答える