我在函数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
答案 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];
}