Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么我的UIActionSheet被我的TabBarController隐藏?_Objective C_Ios_Xcode_Ipad - Fatal编程技术网

Objective c 为什么我的UIActionSheet被我的TabBarController隐藏?

Objective c 为什么我的UIActionSheet被我的TabBarController隐藏?,objective-c,ios,xcode,ipad,Objective C,Ios,Xcode,Ipad,我在iPad 5.1(XCode 4.3)项目中正确实现UIActionSheet时遇到问题。我可以用我需要的所有项目正确地填充它。列表比窗口长,但滚动条会自动出现,等等。然而,取消按钮(我想应该在末尾)在我的选项卡栏后面出现了半隐藏。如下所示: (对不起,现在还不让我发布图片) 以下是我的故事板设置: 入口点是左侧的选项卡栏控制器,它连接到另一个导航控制器(中心),该导航控制器的右侧有视图控制器作为根视图。 我尝试过以各种方式呈现UIActionSheet,但这种奇怪的行为仍然存在,我不知道

我在iPad 5.1(XCode 4.3)项目中正确实现UIActionSheet时遇到问题。我可以用我需要的所有项目正确地填充它。列表比窗口长,但滚动条会自动出现,等等。然而,取消按钮(我想应该在末尾)在我的选项卡栏后面出现了半隐藏。如下所示:

(对不起,现在还不让我发布图片)

以下是我的故事板设置: 入口点是左侧的选项卡栏控制器,它连接到另一个导航控制器(中心),该导航控制器的右侧有视图控制器作为根视图。

我尝试过以各种方式呈现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文件,所以我把它放在google文档上并共享。链接如下。如果你点击它,在文件下应该有一个下载选项,它会给你原始的zip文件


我认为,如果您获得了对选项卡栏控制器的引用,那么您应该能够从中呈现它。你可以试着从主窗口显示它,但我认为你不应该依赖它

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

我认为,如果你得到了一个对选项卡栏控制器的引用,那么你应该能够从中呈现它。你可以试着从主窗口显示它,但我认为你不应该依赖它

[action showInView:[[UIApplication sharedApplication] keyWindow]];
试试这个:

CGRect r = CGRectMake(x, y, w, h); //change values to fit location of button
[actionSheet showFromRect:r inView:self.view animated:YES];
我在一个有同样问题的应用程序上使用了它,然后“驳回”按钮显示正常。

试试这个:

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

我在一个有同样问题的应用程序上使用了它,然后“驳回”按钮显示正常。

似乎没有真正的解决方案。如果您添加了那么多的按钮标题并从选项卡栏中显示出来,则这似乎是对
ui操作表的限制

除此之外,从选项卡栏显示
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];

似乎没有真正的解决办法。如果您添加了那么多的按钮标题并从选项卡栏中显示出来,则这似乎是对
ui操作表的限制

除此之外,从选项卡栏显示
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];

在看不到这一点的情况下,很难说出UI问题。你有可能做一个非常小的演示项目吗?明天我可以试着用这个确切的场景组合一个新项目,应该不会花很长时间。谢谢你的反馈嗯,是的,这是一个有趣的问题。我能做的最好的事情就是显示按钮上的工作表,这样你可以看到取消按钮的一半。即使从TBC的角度来看,也不能解决问题。我猜,这是由于苹果公司建议在iPad上根本不显示取消。如果我给取消按钮设置为零,然后添加最后一个按钮,只显示文本“取消”,它仍然会减少一半(如你所说)。我不知道,也许这已经足够好了,因为你可以直接点击动作表的外部来忽略它。我真希望我能弄明白这是为什么。我的应用程序将有很多这样的选择一个行动(试图取代没有下拉列表),但也许我只是做了一个弹出视图这更好。虽然我讨厌它有多重,但在看不到它的情况下很难说出UI问题。你有可能做一个非常小的演示项目吗?明天我可以试着用这个确切的场景组合一个新项目,应该不会花很长时间。谢谢你的反馈嗯,是的,这是一个有趣的问题。我能做的最好的事情就是显示按钮上的工作表,这样你可以看到取消按钮的一半。即使从TBC的角度来看,也不能解决问题。我猜,这是由于苹果公司建议在iPad上根本不显示取消。如果我给取消按钮设置为零,然后添加最后一个按钮,只显示文本“取消”,它仍然会减少一半(如你所说)。我不知道,也许这已经足够好了,因为你可以直接点击动作表的外部来忽略它。我真希望我能弄明白这是为什么。我的应用程序将有很多这样的选择一个行动(试图取代没有下拉列表),但也许我只是做了一个弹出视图这更好。虽然我讨厌isI看到的其他信息有多重,但也有类似的说法。我不完全确定如何从这个特定视图“获取”我的选项卡栏控制器。我甚至读到过这样的东西,当控制器像这样嵌套时,没有直接链,你必须通过AppDelegate或其他东西(我不熟悉)。我尝试了你的代码行,但我遇到了同样的问题:奇怪的是,无论我给它提供了什么视图,它都会这样做。不过,我不能100%确定我是否已经成功引用了主选项卡栏控制器。有什么帮助吗?如果您查看applicationelegate.h文件(这可能是项目的另一个名称),您应该会看到一个tabbarcontroller,我认为它是您的根控制器。从中,您可以通过应用程序代理和pres访问它