Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 最佳实践:UIViewController或UIView_Ios_Iphone_Objective C_Uiview_Uiviewcontroller - Fatal编程技术网

Ios 最佳实践:UIViewController或UIView

Ios 最佳实践:UIViewController或UIView,ios,iphone,objective-c,uiview,uiviewcontroller,Ios,Iphone,Objective C,Uiview,Uiviewcontroller,我将在IOS中设计一个组件,其中有表视图和网格视图;意味着用户可以在表格或网格中查看其数据。所以我要做的是添加一个UIViewController和两个子视图控制器,一个用于表,另一个用于集合视图。我只使用UIViewController处理所有事情。这意味着当用户想要使用我的组件时,他必须添加为子视图控制器。我的问题是,“像我现在这样使用UIViewController是最好的做法,还是应该将所有内容都转换为UIView,因为UIView重量很轻。”我将只在组件中编写表示逻辑。我们将使用委托从

我将在IOS中设计一个组件,其中有表视图和网格视图;意味着用户可以在表格或网格中查看其数据。所以我要做的是添加一个UIViewController和两个子视图控制器,一个用于表,另一个用于集合视图。我只使用UIViewController处理所有事情。这意味着当用户想要使用我的组件时,他必须添加为子视图控制器。我的问题是,“像我现在这样使用UIViewController是最好的做法,还是应该将所有内容都转换为UIView,因为UIView重量很轻。”我将只在组件中编写表示逻辑。我们将使用委托从外部获取数据。如果我应该使用UIView,那么什么时候应该使用UIViewController


谢谢,因为我认为您可以通过使用表格视图创建网格视图,只需在每个单元格上添加多个视图即可


在将网格切换到列表或将列表切换到网格时,只需检查您的类型并重新加载tableview即可

避免将逻辑放入UIView子类。

您当前的方法是正确的

UIViews应该做一件而且只有一件事:在被要求时绘制视图

UIViewController更复杂。他们负责使用执行其工作所需的任何数据设置视图,必要时将多个视图(或视图控制器)组合在一起,响应视图组件或设备中的事件,并与代码/系统的其余部分通信

因为您的代码希望显示两种不同类型的信息,所以它比普通UIView样式更适合UIViewController

正如您所指出的,Apple本身有许多UIView子类的示例,这些子类具有委托并执行复杂的操作。但是,如果您正在编写一个新组件,并且它很复杂(就像您的组件一样),我郑重建议您使用UIViewController方法

历史注释:苹果曾经建议UIViewController只显示/合成UIView,而不显示其他UIViewController(尽管令人困惑的是,他们并不总是遵循自己的建议!)。这将与他们创建一些相当复杂的UIView子类相一致。但是,他们不久前改变了这种姿态,并为UIViewController添加了对其内部合成其他UIViewController视图的支持如果苹果的立场一直像现在这样,你可能会发现他们的一些UIView子类被实现为UIViewController


作为一个实验,尝试用两种方式实现您的组件可能是很有教育意义的。我预测您会发现UIView方法更加笨拙,因为您需要手动重新垂直于一些“线路”,而这些“线路”是通过UIViewController方法“免费”获得的。

我的问题不符合逻辑。我想知道我正在做的一切UIViewController都很好,或者一切都应该是UIView。哪一个是最好的实践如果你的控件将与新的控制器一起出现,那么它也可以,如果它将被添加到任何屏幕上,那么只需使用UIView。你的意思是说我应该使用UIView,因为我只在我的组件中放置表示逻辑。逻辑意味着单元格的外观以及表格视图和网格表示动画等除了显示作为输入提供的内容以外的所有内容。视图不应该知道它在哪里,周围是什么,或者如果显示、隐藏或触摸它会发生什么。它应该只显示它的输入。例如,您可以覆盖它的绘制方法。感谢Man的清晰想法。但是,正如您所说,“UIView通常配置有执行其工作所需的任何信息,而不是询问学员的信息。”但是UITableView使用数据源和委托人询问数据这是规则的一个例外,您是对的。不过,我不建议遵循这个例子!如果某个东西在任何方面都很复杂,请将其设置为视图控制器,而不仅仅是视图。在您的示例中,根据我的理解,您希望合成不同的视图。这是一个UIVIEW控制器的工作,而不是UIVIEW。在我的回答中,我已经编辑了关于委托+UIVIEW的部分,因为有很多使用UIVIEWS的苹果的例子。@ SaChin,如果您觉得有用的话,请考虑接受我的答案。