【问题标题】:iphone - Display modal view(slideup) in a tab bar interface with navigation bariphone - 在带有导航栏的标签栏界面中显示模式视图(上滑)
【发布时间】:2011-08-03 05:44:55
【问题描述】:

我是 iphone 编程新手,任何帮助都会很好。我有一个包含 3 个选项卡的应用程序,最后一个选项卡很深,因此创建了一个基于视图的应用程序,其中选项卡栏作为根控制器,并使用 link 添加了导航控制器。

在作为 UIViewController 子类的第二个选项卡中,我试图显示一个模态视图,它也是 UIViewController 的子类。在我的第二个选项卡中,当我尝试呈现模式视图时,应用程序崩溃并显示“GDB:程序收到信号:“SIGABRT”。这就是我所拥有的

ModalViewController *mvc = [[ModalViewController alloc] initWithNibName:@"ModalView" bundle:nil];
[self presentModalViewController:mvc animated:YES];

这里的“self”是第二个选项卡的 UIViewController。如何在第二个选项卡中呈现作为视图控制器的模式?我在这里做错了什么?

谢谢

【问题讨论】:

    标签: iphone objective-c tabs uitabbarcontroller modal-dialog


    【解决方案1】:
    ModalViewController *mvc = [[ModalViewController alloc] initWithNibName:@"ModalView" bundle:nil];
    [tabBarController presentModalViewController:mvc animated:YES];
    [mvc release];
    

    内存泄漏,使用后必须释放对象[mvc release];

    【讨论】:

    • 感谢您回来。我试过这个,但我得到“tabBarController”未定义。我的范围内没有它。在我的 appdelegate 中,我添加了标签栏和导航栏控制器。所以我得到了我的代表并尝试像这样访问 tabcontroller,但仍然崩溃。[delegate.myTabController presentModalViewController: mvc animated:YES];
    • 当然它在你当前的控制器中是未定义的。您是否在应用程序委托中合成了属性“myTabController”?在您当前的控制器中,您如何访问您的应用程序委托?你应该像这样访问它:appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
    • 您是否创建了 myTabController 的 IBOutlet 并创建了该属性?向我们展示您的委托类文件以及您是如何创建 myTabController 的?正在使用 xib 文件还是以编程方式?
    • 在我的应用程序委托中,我有我的 tabcontoller。 @interface TabNavAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; IBOutlet UITabBarController *myTabController; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UITabBarController *myTabController; 在我当前的控制器中,我说TabNavAppDelegate *delegate = (TabNavAppDelegate *)[UIApplication sharedApplication].delegate;[delegate.myTabController presentModalViewController:mvc animated:YES];[mvc release];
    • 我按照这个 [youtube.com/watch?v=LBnPfAtswgw] 创建了我的标签栏和导航栏
    【解决方案2】:

    ModalViewController 需要是 TabBarController 的子项:

    ModalViewController *mvc = [[ModalViewController alloc] initWithNibName:@"ModalView" bundle:nil];
    [tabBarController presentModalViewController:newNavController
                                                           animated:YES];
    

    【讨论】:

    • Maggie 给我的答案有点骇人听闻 UINavigationController 不允许将 UITabBarControllers 推入其导航堆栈。标签栏小部件本身可以包含在导航屏幕上,因此一种方法是使用基于导航的应用程序模板。
    • 是的,抱歉,我刚刚阅读了代码部分,并认为呈现模态视图控制器时存在问题。将编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2016-11-03
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2011-11-15
    相关资源
    最近更新 更多