繁体   English   中英

在没有界面构建器的情况下,使用UIViewController和UIViews切换视图的最佳方法是什么?

[英]What is the best way to switch views with UIViewController and UIViews without interface builder?

嘿伙计们我想过几个解决方案,但不是很满意他们所以需要一些想法。

我有:

  • 3 UIView实例view1,view2,view3
  • 1个UIViewController实例,UIViewController1,用于存储view1,view2和view3

我想要:

  • 在view1中放置一个方法,告诉UIViewController1切换到view2。

我是否需要在view1中传递对UIViewController1的引用? 这是唯一正确的方法吗?

首先,这些是全屏视图吗? 如果是这样,您应该考虑使用3个视图控制器,每个视图一个,并且可能将它们安装在UITabBarController中,这与您描述的行为类似。 但无论如何:

不,视图不应该告诉控制器做任何事情。

在MVC架构中,视图呈现信息并接收(某些)用户交互。 控制器有责任决定如何处理该操作。

视图的作用是告诉控制器发生了交互。

所以主要的问题是 - 什么事件会产生这种行为?

是按钮吗? 按钮(UIControl的子类)使用目标操作模式来处理此通信。 您的视图应提供对按钮的引用:

@property (nonatomic, retain) UIButton *switcherButton;

接下来,在视图控制器中,您将实现一个方法:

-(void)viewSwitcherButtonTapped:(id)sender;

这是您的视图可以告诉控制器发生UI事件的方式。 这就是应该做的一切。 控制器可以根据模型中的状态信息来决定,也可以根据自己的内部状态或逻辑来决定点击该按钮时应该发生什么。

最后,在创建视图之后,控制器会将自己挂钩到按钮:

[view.switcherButton addTarget:self action:@selector(viewSwitcherButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

这样任何视图控制器都可以使用此视图,视图不依赖于对控制器的引用(因为它不应该)。

但是按钮只是一个示例,如果生成行为的事件不同,您的实现可能会有所不同。 回答这个问题,也许我可以修改这个答案来申请。

你应该看看

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns中的 “模型 - 视图 - 控制器设计模式”,“目标 - 动作机制”和“授权” 。 HTML

你有2个选择:

快速而又脏的:只需在每个视图中声明一个指向UIViewController的属性,将其定义为assign以避免循环引用(我假设你保留了viewcontroller中的视图)。 然后你可以通过这个属性调用uiviewcontroller上的方法

好的:让每个视图广播一个通知,uiviewcontroller注册这个通知,并在其回调中做它需要做的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM