[英]How do I create reusable iOS controls?
作为一个新的iOS开发人员,我正在尝试确定在iOS4 +中创建可重用控件的最佳方法。 例如,如果我想创建一个可以在多个其他视图中使用的自定义UIImageView,那么最佳方法是什么。
我创建了包含以下文件的控件:
假设我想要一个使用.nib文件的控件。
我该怎么做:
任何见解或参考赞赏。 谢谢
您可能不会使用nib / xib来创建可重用的视图“控件”。 iOS与您可能习惯的非常不同,比如Java或.NET。 对于某些类型的视图,您将创建一个支持它的xib和控制器/类 - UITableViewCell就是一个例子。
我希望我可以一步一步地指导你如何实现你想要做的事情,但我不能,因为我没有足够的信息来确定你实际上要做什么。 Apple开发者网站上有几个很棒的指南让您熟悉View / Controller / Touch事件交互,但该网站目前没有响应(我假设因为发布了WWDC视频)。 说起来,观看WWDC 2010中的视频将是学习一些你想要实现的目标的另一种好方法,尤其是UIKit会议。
您不会创建“控件”,因为您可能习惯使用它们,而是自定义UIView-后代对象和自定义UIViewController后代对象。 在我的项目,我发现非常非常少的场景中创建可重用的UIView是(除了UITableViewCells其他)任何好处。 iOS项目中绝大多数可重用代码是ViewControllers。 您将通过使用委托来公开事件 - 您的控制器将定义另一个对象将实现的委托,并从您的控制器接收方法调用以处理委派的任何内容。 同样,Apple指南和WWDC视频也很好地解释了这一点。
以下是可重用控制器的示例及其用法:
MyEntityViewController.m
- (id)initWithEntity:(EntityFoo *)theEntity inEditMode:(BOOL)inEditMode {
self = [super initWithNibNamed:@"EntityFooView" bundle:nil];
if(self) {
//retain entity somewhere
//dont setup view in here!
}
return self;
}
- (void)viewDidLoad {
//setup view in here. This ensures compatibility with standalone operation
}
RootViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
EntityViewController *evc = [[EntityViewController alloc] initWithEntity:self.someEntity inEditMode:NO];
[self.view addSubview:evc.view];
//You MUST call this method, the framework will not call it on sub-controllers
[evc viewDidLoad];
self.entityViewController = evc;
[evc release];
}
这不是一个完整的实现,随着您的经验和框架的增长,您将找到一种在主视图控制器中通知(提示提示)子视图控制器事件的模式。 如果您有权访问它们,我强烈建议您查看WWDC 2011视频,因为下一个操作系统中会出现与此主题有关的内容。
这是我的故事板版本。
添加视图控制器ID:
在.h文件中创建一个属性来保存控制器。 否则它将从内存中删除:
@property (nonatomic, strong) TestViewController *timetableViewController;
在.m文件中:
-(void)viewDidLoad{
[super viewDidLoad];
TestViewController *centerViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"VIEW_CONTROLLER_ID"];
[self.view addSubview:centerViewController.view];
[centerViewController viewDidLoad];
self.timetableViewController = centerViewController;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.