【问题标题】:Switching multiple views using a delegate使用委托切换多个视图
【发布时间】:2010-07-26 11:01:20
【问题描述】:

我正在开发一个 iPhone 应用程序,除其他外,它允许用户注册、登录和注销远程 Web 服务器。

对于这个应用程序功能,我定义了 3 个视图控制器。

  • 注册视图控制器
  • 登录视图控制器
  • 注销视图控制器

每个都有各自的 xib 文件。

我希望能够根据按下的按钮在视图之间切换。例如:

SignupView 将有一个注册按钮和一个登录按钮,如果按下注册按钮,我想将视图切换到 LogoutView,如果按下登录按钮,那么我想将视图切换到 LoginView。

类似地,LoginView 会有一个登录按钮,按下时会将视图切换到 LogoutView

最后,LogoutView 将有一个注销按钮,该按钮的操作会将视图切换到 LoginView

我一直在考虑在开发时采取多种不同的策略,但我不确定哪一个是最好的。

一个想法,可能是最容易实现的想法是在 xib 文件中定义一个具有三个不同视图的单个视图控制器,并让控制器处理切换。 我对这种方法有一些问题,xib 文件会很大并且加载速度可能很慢,而我的控制器逻辑可能会变得非常复杂。

第二个想法和我目前的方法是有一个父视图控制器,它负责切换三个子视图之一。 我遇到的问题是按钮操作只能分配给当前子视图控制器中的方法。在我的情况下,我需要调用来处理切换的方法在父控制器中,并且此方法不适用于我的子视图。

在这里委托似乎是完美的答案,因为我可以要求父控制器执行 switch 方法,但我仍然不确定如何定义委托以在我的代码中执行此操作。

有人可以帮忙吗?是否有第三种策略比委托策略更有效?

【问题讨论】:

    标签: iphone cocoa-touch


    【解决方案1】:

    如果您使用 UINavigationController 作为您的根,那么您可以弹出并推送您想要的任何控制器。所以,你可能会这样开始:

       [rootController.navigationController pushViewController: someVC animated: YES];
    

    然后,稍后,当你想从 someVC 切换到 someOtherVC 时,你会这样做:

    UINavigationController *navCon = self.navigationController;
    [navCon popViewControllerAnimated: NO];  // get rid of me
    [navCon pushViewController: someOtherController animated: YES]; // add new controller.
    

    注意:所有代码均在浏览器中输入且未经测试,但我认为您应该从中了解。

    您可以使用委托或通知或其他东西,但导航控制器上的推送/弹出功能对于这种视图堆栈重新排列非常方便。 注意:如果您不喜欢导航控制器的外观,您可以隐藏导航栏! :)

    【讨论】:

    • 是的,看起来导航控制器是要走的路。感谢您的建议。
    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多