为什么我的TabBarController隐藏了我的UIActionSheet?

时间:2012-06-28 21:36:45

标签: objective-c ios xcode ipad

我在iPad 5.1(XCode 4.3)项目中正确实现UIActionSheet时遇到问题。我可以用我需要的所有物品正确填充它。列表比窗口长,但滚动条会自动出现,等等。但是,取消按钮(我认为应该在结尾处)会在我的标签栏后面隐藏一半。如下所示:

(抱歉,我不会让我发布图片)

这是我的故事板设置: 入口点是左侧的标签栏控制器,它转到另一个导航控制器(中心),右侧的视图控制器作为根视图。 http://i854.photobucket.com/albums/ab103/srVincentVega/ScreenShot2012-06-28at52713PM.png

我尝试过以各种方式呈现UIActionSheet,但这种奇怪的行为仍然存在,我无法弄清楚如何解决它

- (IBAction)cmdReason:(id)sender
{
    NSArray *reasons = [AppState getInspReasons];

    UIActionSheet *action = [[UIActionSheet alloc]
                             initWithTitle:@"Reason for Inspection"
                             delegate:self
                             cancelButtonTitle:@"Cancel"
                             destructiveButtonTitle:nil
                             otherButtonTitles:nil];

    for (NSString *rsn in reasons)
    {
        [action addButtonWithTitle:rsn];
    }

    [action showInView:self.view];
}

我已尝试过各种方法来显示“动作” - showFromTabBar,showFromToolbar等 - 我对这个开发环境非常陌生,所以我还没有意识到这些项目如何在这个级别进行交互。有没有人建议如何正确地呈现这个?

如果已经在其他地方询问过,我很抱歉。我花了一整天时间尝试来自网络上的一些代码,包括SO。我不知道这与我的故事板布局有什么关系,或者是什么。

还有一件事 - 当我旋转模拟器时,操作表会重新绘制,但最后的位看起来很难看,就像它再也无法弄清楚如何绘制它一样。

非常感谢!

修改 我已经组建了一个非常小的项目来演示这种确切的行为。我没有一个好方法来托管zip文件,所以我把谷歌文档和共享它。链接如下。如果单击该文件,则文件下应该有一个下载选项,可以为您提供原始zip文件。

https://docs.google.com/open?id=0B7IYvy9_c_NLaEFneGc5bzc2S2c

3 个答案:

答案 0 :(得分:1)

似乎没有真正的解决方案。如果你添加了一定数量的按钮标题并从标签栏中显示,那么它似乎是UIActionSheet的限制。

除此之外,从标签栏显示UIActionSheet的正确方法是使用

[action showFromTabBar:self.tabBarController.tabBar];

而不是

// Taken from your example project
AppDelegate *d = [[UIApplication sharedApplication] delegate];
UIWindow *w = d.window;
UIViewController *vc = w.rootViewController;
UITabBarController *c = (UITabBarController *)vc;
UITabBar *t = c.tabBar;
[action showFromTabBar:t];

答案 1 :(得分:0)

我想如果你有一个对标签栏控制器的引用,那么你应该能够从中提供它。您可以尝试从主窗口显示它,但我认为您不应该依赖它。

[action showInView:[[UIApplication sharedApplication] keyWindow]];

答案 2 :(得分:0)

试试这个:

CGRect r = CGRectMake(x, y, w, h); //change values to fit location of button
[actionSheet showFromRect:r inView:self.view animated:YES];

我在我的一个应用程序上使用了同样的问题并且解雇按钮显示正常。