iphone – 子视图UIViewController或在视图不是全屏时创建自定义NSObject

我需要创建一个类控制器来管理我创建的自定义视图的行为.

标准方法是子类UIViewController,但在我的情况下,我决定

NSObject的子类主要有三个原因:

>我的视图需要添加为主视图控制器的小子视图(它不会使用像presentModalViewController或pushViewController这样的东西显示…)并且它不需要任何类型的工具栏或导航控件
>很可能我的控制器不需要通知设备方向,因为它的视图将始终以纵向格式使用,所以我没有兴趣接收通常的旋转消息willRotateToInterfaceOrientation等…
>我需要保持这个类尽可能轻量级,以尽量减少内存消耗.没有子类化UIViewController有利于获得更轻的类而没有一堆我永远不需要使用的方法

我的控制器的界面非常简单,例如:

@interface MyScrollTabBarController : NSObject <MyTabBarViewDelegate> { }

/**
 * The view is created internally by the controller and the client class
 * can access to it in readonly mode
 */
@property (nonatomic, readonly) UIView *view;

/**
 * A Property to change the view appearance
 */
@property (nonatomic, assign) MyScrollTabBarViewState viewState;

/**
 * Others properties used to construct the view's subviews
 */
@property (nonatomic, retain) Location *rootLocation;
@property (nonatomic, readonly, retain) Place *place;

/**
 * Designated initializer
 */
- (id)initWithPlace:(Place *)aPlace;

- (void)setRootLocation:(Location *)location animated:(BOOL)animated;

@end

要从父视图控制器显示其内部视图,我将使用以下内容:

tabBarController = [[MyScrollTabBarController alloc] initWithPlace:aPlace];
tabBarController.viewState = MyScrollTabBarViewStateXX;
tabBarController.view.frame = CGRectMake(...); 
[self.view addSubview:tabBarController.view];

我想知道你对我的选择有什么看法,如果你认为它有可能存在缺陷,当你需要为像我这样不全屏的视图编写控制器时,你通常会做什么.

谢谢

最佳答案 是的,这是正确的方法.

UIViewControllers专门用于控制全屏视图,而不是用于控制子屏幕.在iOS5中,有一种以这种方式组合子屏幕视图控制器的机制,但是在没有大量hackery的情况下iOS4中没有这种机制.

在视图和控制器本身耦合的情况下,您还可以考虑创建一个自定义视图子类,它是自己的控制器,因此,例如,您可以拥有一个自包含的表视图子类来管理自己的数据,并且可以将其放入页面.

点赞