1

我正在函数 quizEnded 中创建 UIActionSheet。其中一个按钮将用户发送到 Game Center。当他们从游戏中心返回时,在 viewdidappear 中再次调用 quizended。这是在旧的操作表之上创建第二个操作表。

https://www.youtube.com/watch?v=QrY1Awt3RX0

我不认为再次调用 quizEnded 会导致问题,而是我没有正确关闭第一个 UIActionSheet。

-(void)viewDidAppear {
// some code ...
if(self.quizDidEnd > 0){
        [BT_debugger showIt:self theMessage:@"@@@Calling quiz ended###"];

        [self quizEnded];
    }
}// end viewDidAppear

// initialize button array
-(void)quizEnded {
// some code ...
    _finishedButtons =  [[NSMutableArray alloc] init];

     // show either the reward screen or the finished screen or quit to menu

    if(earnedReward == TRUE && haveRewardScreen==TRUE) {
         [_finishedButtons addObject:NSLocalizedString(@"quizShowReward", @"Show Reward")];
        //[self showQuizRewardScreen];

    }else {
        if(haveFinishScreen==TRUE){

            [_finishedButtons addObject:NSLocalizedString(@"continue", @"Continue")];
            //[self showFinishScreen];

        }else {
            // if no finish screen then send back to rootviewcontroller
            [_finishedButtons addObject:NSLocalizedString(@"quit", @"Quit")];             }
    }

    if(_enableGameCenter) {
        [_finishedButtons addObject:NSLocalizedString(@"Game Center", @"Game Center")];
    }

    // initialize UIAction sheet
    UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                  initWithTitle:quizResultMessage
                                  delegate:self
                                  cancelButtonTitle:nil
                                  destructiveButtonTitle:nil
                                  otherButtonTitles: nil];


    //add the buttons to the action sheet
    for (int i = 0; i < [_finishedButtons count]; i++) {
        [actionSheet addButtonWithTitle:[_finishedButtons objectAtIndex:i]];
    }

    actionSheet.destructiveButtonIndex = [_finishedButtons count];

    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackOpaque];



    //is this a tabbed app?
    if([appDelegate.rootApp.tabs count] > 0){
        [actionSheet showFromTabBar:[appDelegate.rootApp.rootTabBarController tabBar]];
    }else{
        [actionSheet showInView:self.view];
    }

    [actionSheet release];

}//self.quizDidEnd == 0


}// end quizEnded 

-(void)actionSheet:(UIActionSheet *)actionSheet  clickedButtonAtIndex:(NSInteger)buttonIndex {


[BT_debugger showIt:self theMessage:@"!!!action sheet called!!!"];

NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];

//quit only used if no finished or reward screen present
if([buttonTitle isEqual:NSLocalizedString(@"quit", @"Quit")]){

    // if no finish screen then send back to rootviewcontroller
    [self.navigationController popToRootViewControllerAnimated:YES];
    [BT_debugger showIt:self theMessage:@"Quit tapped"];
}


//show reward
if([buttonTitle isEqual:NSLocalizedString(@"quizShowReward", @"Show Reward")]){
    [self showQuizRewardScreen];
    [BT_debugger showIt:self theMessage:@"Show Reward Tapped"];
}

//show continue
if([buttonTitle isEqual:NSLocalizedString(@"continue", @"Continue")]){
    [self showFinishScreen];
    [BT_debugger showIt:self theMessage:@"Continue Tapped"];
}

//show game center
if([buttonTitle isEqual:NSLocalizedString(@"Game Center", @"Game Center")]){  
    [BT_debugger showIt:self theMessage:@"game center tapped"];
    [self showGameCenter];
    _altend = 0;

}

}// end 
4

4 回答 4

3

如果是打开菜单的手势,请确保将所有代码放入其中:

    if(gestureRecognizer.state == UIGestureRecognizerStateBegan) { }

否则,可能会有手势发生变化的第二部分 (UIGestureRecognizerStateChanged) 导致操作表双发。

于 2013-10-19T08:10:46.550 回答
1

您并没有从我所看到的内容中解散操作表...您必须调用- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated您的操作表以将其解散。

于 2013-03-29T00:05:45.883 回答
0

添加这个:

if(recognizer.state == UIGestureRecognizerStateBegan){
        UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@""
    }
于 2014-12-19T03:01:17.827 回答
0
if(gesture.state == UIGestureRecognizerStateBegan){
    UIActionSheet *sheet;

    sheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"" destructiveButtonTitle:nil otherButtonTitles:@"", nil];
    [sheet showInView:self.view];
}
于 2015-07-24T08:20:33.450 回答