UIActionSheet出现两次

时间:2013-03-28 22:44:45

标签: iphone ios uiactionsheet ipad

我在函数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 个答案:

答案 0 :(得分:3)

如果这是一个提示菜单的手势,请确保将所有代码放入其中:

    if(gestureRecognizer.state == UIGestureRecognizerStateBegan) { }

否则,可能存在手势已更改的第二部分(UIGestureRecognizerStateChanged),这导致动作表双击。

答案 1 :(得分:1)

你并没有从我所看到的内容中驳回行动表...... 您必须在工作表上致电- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated以解雇它。

答案 2 :(得分:0)

添加:

if(recognizer.state == UIGestureRecognizerStateBegan){
        UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@""
    }

答案 3 :(得分:0)

if(gesture.state == UIGestureRecognizerStateBegan){
    UIActionSheet *sheet;

    sheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"" destructiveButtonTitle:nil otherButtonTitles:@"", nil];
    [sheet showInView:self.view];
}