如何创建一行UILabels的“容器”视图?

时间:2011-03-23 02:49:32

标签: iphone ios uiview uitableview

我是否可以要求一些关于如何为一行3个UILabel创建“容器”类型视图的高级指导,以便在自定义子类UITableViewCell中使用?你会如何做到这一点,你会为这个类分类?我需要为此覆盖多少种方法? (例如layoutSubviews,其他?)

背景:

  • 我已经有了一个自定义的子类UITableViewCell,我正在显示多行UILabel,每行有3个UILabel。
  • 为了使代码看起来更干净,将“3 x UILabels行”视为一个视图可以说是
  • 我将如何做到这一点 - 我是否可以为此分类“UIView”?然后我会覆盖“layoutSubviews”,所以得到新的“3 x UILabels排”。

2 个答案:

答案 0 :(得分:1)

使用哪种方法:

我想用你的第二个选项而不是其他选项, 因为如果你从UITableViewCell中继承3 UILabel继承自定义单元格类并将它们放入UIView继承类中。

1.代码看起来更干净(尤其是您的自定义单元类)。正如你所指出的那样。

2.如果您需要超过3个UILabel或任何UIView继承视图,则您的自定义单元类中不需要进行任何更改,

我该怎么做

创建一个UIView继承的类,将所有UILabels添加为子视图,然后将实现提供给-(void) layoutSubviews,为每个UILabel设置框架。

在自定义单元格中添加子类UIView作为子视图,并在-(void) layoutSubviews方法中为其设置框架,

答案 1 :(得分:0)

您可以将UIView子类化,也可以将所有内容放在视图控制器中。我会选择第二个选项,因为你不需要自定义视图来执行复杂的操作,为此目的,子类似乎有点“太多”。

在视图控制器中创建一些实例变量(在.h中):

UILabel     *label1, *label2, *label3;

然后在你的implémentation(在.m中),执行以下操作: 'viewDidLoad'方法:

// First label... Create and configure.
label1  = [[UILabel alloc] init];
// [Configure here]
[[self view] label1];
// Second label... Create and configure.
label2  = [[UILabel alloc] init];
// [Configure here]
[[self view] label2];
// Third label... Create and configure.
label3  = [[UILabel alloc] init];
// [Configure here]
[[self view] label3];

然后在'viewDidLoad'方法中:

// Release / Nillify everything.
[label1 release], label1 = nil;
[label2 release], label2 = nil;
[label3 release], label3 = nil;

在'viewDidAppear'和任何其他表示方向更改的方法中,您必须配置布局...使用父视图rect获取边界/框架,并根据您需要的布局更改3个标签几何

如果您更喜欢通过子类化UIView来完成它,您可以完全相同,但不是在viewDidLoad中进行布局,而是必须按照计划在'layoutSubviews'中进行。此外,如果您的视图来自XIB,则初始化/分配代码可能会转到'initWithCoder:',并且您的dealloc中将取消分配。

希望有所帮助, 皮尔。