iOS:loadView 的推荐模式

Posted

技术标签:

【中文标题】iOS:loadView 的推荐模式【英文标题】:iOS: Recommended pattern for loadView 【发布时间】:2013-01-29 16:54:59 【问题描述】:

如果我在 UIViewController 中有一个复杂 视图层次结构,那么何时将主视图分解到它自己的类中是合适的,即使它不能在其他地方重用?如果我要这样做,对于该视图上的按钮,正确的事件处理方法是什么 - addTarget 直接添加到按钮属性或通过视图类委托?

我与一位同事就我们是否应该始终创建一个单独的视图类进行了长时间的辩论。

(为了讨论的目的,我们假设我们要不惜一切代价避免使用 NIB 文件。)

【问题讨论】:

就我个人而言,我喜欢我的班级小而整洁。出于这个原因,一旦我有了可以被视为一个单独的“控件”的东西,我就会为它创建一个 UIView 子类。在我现在正在进行的项目中,有一个图标栏。我为图标和图标栏创建了一个单独的类。原因是我想避免将图标代码与条形码混合。从这个角度来看,代表团看起来更合适。如果您想稍后通过将 UIButton 替换为按钮的一些自定义实现来重构“控件”,这也将有所帮助。 【参考方案1】:

您可以为一个视图控制器创建单独的视图。如果您想根据特定条件加载特定视图,则可以使用一种自定义 init 方法将视图加载到给定的视图控制器

- (id)initWithView:(UIview *)view 

self = [super init];

if(self) 

    [self setView:view];


return self;

如果您在视图中有不同的按钮,您可以在该视图本身中编写按钮操作方法。为了将这些操作传递给视图控制器,您可以在视图中编写协议并设置视图控制器实例以在视图控制器中委托和实现这些协议方法。为了区分动作,您可以为每个按钮设置标签,并据此在视图控制器中执行适当的动作。

【讨论】:

【参考方案2】:

MVC 应该始终保持控制器小而干净。我要求我的团队始终在逻辑上将复杂视图分成小视图。

至于添加控件,总是尝试更简单的方法。必要时使用委托。

【讨论】:

以上是关于iOS:loadView 的推荐模式的主要内容,如果未能解决你的问题,请参考以下文章

ios-loadView

iOS 根本不使用 loadView 是否很糟糕?

关于iOS9之后的loadViewIfNeeded

在loadView中设置UIView背景颜色没有效果

[ IOS ] iOS-控制器View的创建和生命周期

iOSUIViewController的生命周期