【问题标题】:Iphone: Problem with moving back and forth between two UIViewControllerIphone:在两个 UIViewController 之间来回移动的问题
【发布时间】:2010-04-07 05:13:10
【问题描述】:

让我先描述一下问题的背景。我有 2 个UIViewController 呼叫AdminViewControllerButtonReorderViewControllerAdminViewController 包含 1 个按钮。 ButtonReorderViewController 包含 1 个按钮和 1 张图片。 AdminViewController 中的按钮与事件调用 goToReorderButton 相关联。 goToReorderButton的内容如下:

ButtonReorderViewController *buttonReorder = [[ButtonReorderViewController alloc] initWithNibName:@"ButtonReorderViewController" bundle:[NSBundle mainBundle]];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:buttonReorder];  //Add a Navigation Controller to the root view
[navController setNavigationBarHidden:TRUE];
buttonReorder = (ButtonReorderViewController *) navController;
[[buttonReorder view] setFrame:CGRectMake(0, -20, 320, 470)];
[self.view addSubview:buttonReorder.view];

我使用UINavigationController 允许我左右滑动。所以我在AdminViewController,然后我点击goToReorderButton,它会加载ButtonReorderViewController。我可以左右滑动(太棒了!!!)所以我点击ButtonReorderViewController中的按钮调用goToAdmin,只是回到AdminViewController

-(void) goToAdmin{
     [self.view removeFromSuperview];
}

但是,当我回到AdminViewController 时,我根本无法点击任何内容。该程序没有段错误,只是我根本无法单击按钮。如果我删除goToReorderButton 内的buttonReorder = (ButtonReorderViewController *) navController; 行,那么一切正常。知道如何解决这个问题吗?

【问题讨论】:

    标签: iphone objective-c uiviewcontroller uinavigationcontroller


    【解决方案1】:

    我不确定我是否关注你,但我认为你应该使用 UINavigationController 方法在视图控制器之间导航:

    管理视图控制器应该是导航控制器的根视图控制器,然后您可以推送和弹出重新排序视图控制器。

    应用内委托(applicationDidFinishLaunching: 方法):

    // TODO: Instantiate the adminController
    
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:adminController];
    [window addSubview:navController.view];
    

    在 AdminViewController 中(事件处理方法中的按钮修饰):

    // TODO: Instantiate the buttonReorder
    
    [self.navigationController pushViewController:buttonReorder animated:YES];
    

    在 ButtonReorderViewController 中(事件处理方法中的后退按钮触摸):

    [self.navigationController popViewControllerAnimated:YES];
    

    当然,您必须在使用视图控制器之前实例化它们...


    干杯,
    迈克尔。

    【讨论】:

    • 我的结构与你建议的非常相似,只是更复杂一些。假设viewA 是我的initWithRootViewController,因为viewA 将尝试显示来自coredata 的包含。比如说viewA的第一个视图,显示4个对象,有8个对象,然后向右滑动将显示其余的对象。这就是为什么viewA 作为 UINavigation 控制器(利用推送和弹出视图)。但是,如果我尝试进入管理员视图,那么我不会pushView,而是addSubview,然后通过removeFromSuperView 返回。它工作正常,但现在我在中添加了另一个组件
    • (请先阅读以上内容)新组件允许用户重新排列视图中的对象位置。所以在Admin 视图中,现在我通过addSubView:viewB 生成viewBviewBviewA 的功能一样,所以我想拥有push and pop view 的能力。所以我想让viewBUINavigationController 一样viewA。如果我点击Return button,然后我调用removeFromSuperView 返回Admin,但是,一旦我回到Admin 视图,我无法点击任何内容
    • 正如我所写,您的视图控制器都不应该是导航控制器。您只有一个(在建议的结构中)导航控制器,您只需推送和弹出您的 (3) 视图控制器。顺便说一句,UINavigationItem 中内置了“返回”按钮,该按钮会自动添加到顶部(标题)中 - 您不必自己实现此按钮。只需删除[navController setNavigationBarHidden:TRUE]; 行...查看一些Apple 的示例应用程序。导航。控制器几乎用于每个示例应用程序。并且总是以同样的方式。不要试图重新发明轮子......
    • 让我重新考虑一下我的结构。我有addSubViewpush and pop view 的原因是这样的:假设我在Admin 视图中,然后我在堆栈上的push 3 视图中,如果我单击return 按钮(假设让我直接回到管理员视图),我必须pop 3 次才能回到 3 次(跟踪这可能会很痛苦)。但是如果我addSubView,那么我就可以removeFromSuperView,直接回到Admin
    • 有一个问题,当我们push and pop view 在堆栈上或堆栈外时,是否只有一个堆栈可以进出所有内容,或者每个 viewController 都有自己的堆栈?
    【解决方案2】:

    听起来应用程序在您指出的那条线上崩溃了。调试控制台崩溃时有输出吗?

    看起来buttonReorder = (ButtonReorderViewController *) navController; 行在演员表中失败了。你确定ButtonReorderViewController 扩展UINavigationController 吗?如果不是,那你就不能那样投了。

    【讨论】:

      【解决方案3】:

      我不确定,但我认为您可以使用 NavigationController 的 PusViewController 方法来完成您的工作。

      【讨论】:

        猜你喜欢
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多