iphone - 使用委托(delegate)切换多个 View

标签 iphone cocoa-touch

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

对于这个应用程序功能,我定义了 3 个 View Controller 。

  • SignupViewController
  • 登录 View Controller
  • LogoutViewController

并且每个都有各自的 xib 文件。

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

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

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

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

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

一个想法(可能也是最容易实现的)是使用一个 View Controller ,其中在 xib 文件中定义了三个不同的 View ,并让 Controller 处理切换。 我对这种方法有一些问题,xib 文件会很大并且加载速度可能很慢,而我的 Controller 逻辑可能会变得非常复杂。

第二个想法和我当前的方法是有一个父 View Controller ,负责切换三个 subview 之一。 我遇到的问题是按钮操作只能分配给当前 subview Controller 中的方法。就我而言,我需要调用来处理切换的方法位于父 Controller 中,并且此方法不适用于我的 subview 。

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

谁能帮忙解决这个问题吗?是否有第三种策略比委托(delegate)策略更有效?

最佳答案

如果您使用 UINavigationController 作为根,那么您可以弹出和推送任何您想要的 Controller 。所以,你可以开始这样的事情:

   [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.

注意:所有代码都在浏览器中输入且未经测试,但我认为您应该从中得到启发。

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

关于iphone - 使用委托(delegate)切换多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3334201/

相关文章:

iphone - 在 UITableViewCell 和 UITableViewController 之间传递数据?

iphone - 我的应用程序可以在全局范围内使用,还是仅在我的国家/地区可用?

ios - 坐标空间之间的转换 SpriteKit

iphone - Phonegap-无法从JavaScript调用本地iOS功能

objective-c - 多 View iOS 应用程序的约定

objective-c - 如何使用 NSURL 下载

iphone - Objective-C 内存管理 - 很确定我做错了

iphone - Google Analytics for iOS,如何设置域?

objective-c - 在 Objective C 中动态调用类方法

iphone - 自定义按钮显示在模拟器上,但不显示在iPhone设备中