Возникли проблемы при отклонении 2 UIActionSheets - PullRequest
0 голосов
/ 21 октября 2011

У меня есть 2 UIBarButoon в UIToolbar.У каждого есть IBAction для запуска своих собственных UIActionSheets.

Прямо сейчас, если я представлю один, а затем щелкните другой UIBarButton, будет представлен другой ActionSheet, поэтому у меня есть два на экране, и они перекрываются.Я хочу, чтобы один из них был отклонен при предъявлении другого и т. Д.

У меня есть этот код:

- (IBAction)showFirstActionSheet:(id)sender
{
    if (!self.eRXActionSheet)
    {
        UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"eRX Menu" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"New eRX", @"eRX Refills", nil];
        sheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
        self.eRXActionSheet = sheet;
        [sheet release];

        [self.eRXActionSheet showFromBarButtonItem:sender animated:YES];

        return;
    }

    [self.eRXActionSheet dismissWithClickedButtonIndex:self.eRXActionSheet.cancelButtonIndex animated:YES];
    self.eRXActionSheet = nil;
}

- (IBAction)showSecondActionSheet:(id)sender
{
    if (!self.actionSheet)
    {
        UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Action Menu" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Help", @"Lock", @"Log Out", nil];
        sheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
        self.actionSheet = sheet;
        [sheet release];

        [self.actionSheet showFromBarButtonItem:sender animated:YES];

        return;
    }

    [self.actionSheet dismissWithClickedButtonIndex:self.actionSheet.cancelButtonIndex animated:YES];
    self.actionSheet = nil;
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (actionSheet == self.eRXActionSheet)
    {
        if (buttonIndex == 0)
        {
            [self erxButtonClicked];
        }
        else if (buttonIndex == 1)
        {
            [self erxRefillButtonClicked];
        }
    }
    else
    {
        if (buttonIndex == 0)
        {
            [self helpButtonClicked];
        }
        else if (buttonIndex == 1)
        {
            [self lockButtonClicked];
        }
        else if (buttonIndex == 2)
        {
            [self logOut];
        }
    }
}

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Позвоните dismissWithClickedButtonIndex:animated: на листе действий, который вы хотите отклонить.

Например, showFirstActionSheet добавьте эту строку, чтобы отклонить другую:

if(self.actionSheet) [self.actionSheet dismissWithClickedButtonIndex:<indexofCancelButton> animated:YES];
1 голос
/ 21 октября 2011

В вашем коде перед созданием листа действий вы проверяете, не отображается ли лист действий, который должен отображаться, на ноль. По логике это всегда будет верным.

Скорее вы должны проверить, если лист действий other не ноль. Если это так, отклоните его и создайте новый.

-(void)buttonForActionSheet1Clicked {
    if (actionSheet2 != nil) {
        // dismiss it
    }
    // show actionSheet1
}

-(void)buttonForActionSheet2Clicked {
    if (actionSheet1 != nil) {
        // dismiss it
    }
    // show actionSheet2
}

В качестве альтернативы, вы можете заставить пользователя отклонить текущий лист действий с помощью кнопки отмены, сначала отключив другую кнопку на панели инструментов.

...