iPhone SDK:C#中的CustomControls

时间:2010-11-18 22:58:21

标签: iphone uiview resize subclass

我有一个UIViewController。 UIViewController有一个带有一个插座的NIB - 一个UIView,包含几个按钮和标签。想象一下,它就像UIDatePicker。

为了不被强制将所有控制代码复制并粘贴到新环境中,我试图将UIView封装到一个单独的UIView子类中,该子类具有自己的NIB,类似于C#CustomControl方法。

从控制(其他)UIViewController我实例化NIB中的视图

NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
selectorView = (DateTimeSelectorView*)[nibObjects objectAtIndex:0];

selectorView是使用UIViewController类的属性。问题:我的UIView的“initWithFrame”从未被调用过。我的UIView覆盖整个空间(320x480),而它的尺寸应该更小。我怎么能得到这个?此外,UIView似乎隐藏了所有其他控件,从UIViewController类实例化。

此致

2 个答案:

答案 0 :(得分:0)

当nib加载器实例化视图时,不会调用initWithFrame:。 nib加载器调用initWithCoder:。您应该实现initWithCoder来执行任何初始化,包括设置框架。

答案 1 :(得分:0)

所以这里有一个问题的“HowTo”:如何使用 NIB将自包含的UIView嵌入到我的UIViewController 中?

1)假设您有一个带有按钮和文本字段的UIView,进行一些登录。您在一个名为Login.xib的单独NIB中拥有UI。该功能在Login.m和Login.h中,是UIView的子类。班级名称为“登录”。请注意,在Login.xib中正确设置了类。一切都很好。

2)现在你想在新的应用程序中使用这个“开箱即用”。

3)将三个文件(Login.m,Login.h和Login.xib“)拖到新的基于UIView的项目中

4)在你的UIViewController类中添加一个属性,指向你的Login类(当然,先包含Login.h)

5)使用Login.xib打开IB并将文件的所有者设置为当前的UIViewController类

6)将Login.xib的主视图与UIViewController中定义的属性相连接(!!这很重要!!)

7)将以下内容添加到UIViewController中的viewDidLoad中(假设您的属性名称为“myLogin”)

[[NSBundle mainBundle] loadNibNamed:@"Login" owner:self options:nil];
myLogin.frame = CGRectMake(0 ,100, 320, 200); // Optional, you may also use the initial bounds
[self.view addSubview:myLogin];

视图将显示在您出现的位置。您的超级视图中的其他控件也可用。

我花了几个小时才找到它。这里和那里有一些分散的信息,但到目前为止我还没有找到完整的“如何”完成这个简单的任务。

此致