我的模态视图控制器显示在我的UIActionSheet后面,而我的UIActionSheet并没有被解雇。我正在使用:
[self presentModalViewController:composeTweetView animated:YES];
呈现我的模态视图控制器。
我的行动表正在tabBar中显示:
[actionSheet showFromTabBar:self.parentViewController.tabBarController.tabBar];
此代码适用于iOS 4.0。
if (buttonIndex == 0) {
if (self.isLoggedIn) {
[FlurryAPI logEvent:@"ST_REPLY_CLICKED"];
composeTweetView.isDirectMessage = FALSE;
[self presentModalViewController:composeTweetView animated:YES];
[composeTweetView release];
}
else {
LoginViewController* loginView = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
loginView.delegate = self;
loginView.isPostingComment = TRUE;
self.isReply = TRUE;
[self presentModalViewController:loginView animated:YES];
[loginView release];
[composeTweetView release];
}
}
要点:
我有一个包含UITabBar的UIViewController。我正在展示一个UIActionSheet,它有几个按钮,提供模态视图控制器。当呈现模态视图控制器时,UIActionSheet应解除其自身,并且模态视图应位于堆栈的顶部。问题是,UIActionSheet没有被忽略,并且模态视图被加载在它后面。直到iOS 4.2.1才出现此问题
重现步骤:
[actionSheet showFromTabBar:self.parentViewController.tabBarController.tabBar];
预期结果:
1. The UIActionSheet should dismiss itself, and the modal view should appear in front
实际结果:
1. The UIActionSheet does not get dismissed and the modal view appears behind it.
回归:
This problem was not apparent prior to iOS 4.2.1
备注: 我已经尝试过显示UIActionSheet的其他方法,所有这些方法都不能按预期工作:
//[actionSheet showInView:self.parentViewController.tabBarController.tabBar];
//[actionSheet showInView:[self.view window]];
//[actionSheet showInView:self.parentViewController.tabBarController.view];
//[actionSheet showInView:[UIApplication sharedApplication].keyWindow];
答案 0 :(得分:2)
在整理样本以重现您的问题时,我看了一下UIActionSheet委托方法。我相信你可以使用:
actionSheet:didDismissWithButtonIndex:
而不是
actionSheet:clickedButtonAtIndex:
我还没有对它进行测试,但我相信你仍然得到相同的按钮编号,直到动作表从视图中消失后它才会触发。
答案 1 :(得分:2)
我不明白你的问题对不起,但一切都对我有用。我在模拟器和4.2.1 iPod Touch 4G(都工作过)中尝试了以下代码
- (IBAction)doit {
UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"title" delegate:self cancelButtonTitle:@"not OK" destructiveButtonTitle:@"Absolutely" otherButtonTitles:nil];
[actionSheet showFromTabBar:self.tabBarController.tabBar];
[actionSheet release];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0) {
UIView *v = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
v.backgroundColor = [UIColor redColor];
[self.view addSubview:v];
[v release];
}
}
IBAction
相关联(必须将FileOwner
命名为FirstViewController
)FirstViewController.h
(<UIActionSheetDelegate>
)//编辑:好的,我看到你想以模态方式呈现它,但即使这对我来说也适用于4.2.1
TMPController *tmp = [[TMPController alloc]initWithNibName:@"TMP" bundle:nil];
[self presentModalViewController:tmp animated:YES];
[tmp release];
也许它有效,因为我使用self.tabBarController.tabBar
,试试
答案 2 :(得分:1)
不确定您是否已经解决了这个问题。但我上面没有看到明确的答案。我和你有完全相同的问题。所以最后,这是我的一个问题,但帮我调试的是在方法中添加实际的动作代码
actionSheet:didDismissWithButtonIndex:
马太建议。
这证明该观点实际上被驳回了。就在那时我意识到我在我的viewWillAppear方法中放了UIActionSheet alloc。因此,每次出现视图时,它都会重新创建操作表。
答案 3 :(得分:0)
这似乎很奇怪,因为SDK文档声明:
actionSheet:clickedButtonAtIndex: ... 调用此方法后,接收器将自动关闭。
我可以想到它可能不会消失的3种可能性:
答案 4 :(得分:0)
我刚刚编写了一个快速示例应用程序来测试它,它就像我预期的那样工作(即,我无法重复你的问题)。 有点不同,因为我没有做TabBar应用程序,但我仍然希望这会有所帮助。我对UIActionSheet
所做的就是这样展示:[actionSheet showInView:self.view]
。也许这会奏效?
很抱歉匆忙的回答,当我引起我的注意时,我正在出去。 :)
答案 5 :(得分:0)
iOS 4.2也遇到过这样的问题。 我认为您应该尝试以下步骤:
2.现在 - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 方法,为点击的方法调用 presentModalView {} 方法像这样的按钮索引:
if(buttonIndex==0)
{
[self performSelector:@selector(presentModalView) withObject:nil afterDelay:0.3];
}
3.您也可以尝试不同的延迟时间。
希望有所帮助......
答案 6 :(得分:0)
我有同样的问题从AlertBox / ActionSheet调用MailComposeView导致MailCompseView落后于隐形屏幕。
我通过在actionSheet按钮处理程序中调用dismissWithClickedButtonIndex:animated来解决它。
答案 7 :(得分:0)
问题已在iOS5中解决。