【问题标题】:how to create a "container" view of a row of UILabels?如何创建一行 UILabel 的“容器”视图?
【发布时间】:2011-03-23 02:49:31
【问题描述】:

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

背景:

  • 我已经有一个自定义的子类 UITableViewCell,我可以在其中显示多行 UILabel,每行有 3 个 UILabel。
  • 为了使代码看起来更简洁,可以将“3 x UILabel 的行”视为一个视图
  • 我将如何做到这一点 - 我是否会为此设置“UIView”的子类?然后我会在其中覆盖“layoutSubviews”,以便让新的“3 x UILabel 行”自行布置。

【问题讨论】:

    标签: iphone ios uiview uitableview


    【解决方案1】:

    使用哪种方法:

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

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

    2.此外,如果您需要 3 个以上的 UILabel 或任何 UIView 继承的视图,您的自定义单元格类中不需要更改,

    我该怎么做

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

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

    【讨论】:

    • 感谢 Jhaliya - 你正在证实我的猜测,这是一种很好的方法
    • YES :你的方法中最好的部分,你最终会得到一个可重用的组件(包含 3 个标签的 UIView 子类也可以在其他地方使用)
    【解决方案2】:

    您可以继承 UIView 或将所有内容放在视图控制器中。我会选择第二个选项,因为您不需要自定义视图来做复杂的事情,为此目的,子类似乎有点“太多”。

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

    UILabel     *label1, *label2, *label3;
    

    然后在您的实现中(在 .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 中解除分配。

    希望对您有所帮助, 皮埃尔。

    【讨论】:

    • 感谢 Pierre - 您的第二个选项是建议我可以有两个视图控制器,并让一个控制器引用另一个控制器来构建每一行 UILabel?我已经在单个子类 UITableViewCell 中实现了一切正常,所以我正在寻找一种方法来打破 UILabel 行的编码...
    • 不,第二个选项更多的是关于真正的 UIView 子类化(例如,让自定义 UIView 完成所有工作,而不是将工作委托给您的控制器)。在 UITableViewCell 中这样做是可以的,我想我不明白你的问题......你能发布一些代码吗?
    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    相关资源
    最近更新 更多