2

以前我用故事板设置了这个,拖动了 UILabel,定位它们并调整它们的大小,我将它们拖到 UITableViewCell 上,然后为另一个 UITableViewCell 做一个不同的版本。

例如,如下所示(但在图片中它们尚未使用标签进行自定义):

在此处输入图像描述

然后在数据源中,我只需检查标识符,并根据标识符是什么,相应地自定义单元格。

但是,我需要比从情节提要中获得更多的定制,因为每个单元格将有两个 UIView(一个顶部和一个底部以允许滑动顶部),所以我不能真正做到这一点故事板,因为我以编程方式将标签和所有内容添加到 UIView。

但我的问题是:当我以编程方式执行此操作时,如何判断哪个单元格是哪个单元格,以便我可以相应地自定义 UILabel 的布局?使用情节提要,我显然可以将 UILabel 拖到每个上,但是当以编程方式进行设置并设置 UIView 时,我不知道该怎么说,“嘿,如果标识符是这个,请像这样添加 UILabel”,因为UIViews 不知道任何标识符。

基本上结构是这样的:

UITableView -> UITableViewCell -> CellFront(UIView) & CellBack(UIView)

并且单元格的外观来自添加到 CellFront UIView 的标签。但是单元格有两种外观,如果没有故事板,我不知道该怎么做。

4

3 回答 3

1

尽管UIViews 不知道标识符,但它们有一个名为的属性tag,可用于您想要的任何目的。例如,您可以将标记设置为1一种2单元格,以及另一种单元格,然后使用标记来区分代码中的单元格。此外,一旦您的视图被标记,您就可以调用包含视图,并用您想要viewWithTag:的视图取回视图。tag

于 2013-04-14T03:22:30.057 回答
1

如果您仅在代码中创建单元格,那么您在表格视图控制器的 viewDidLoad 方法中注册您的 UITableViewCell 子类。该方法设置标识符。然后,您在 cellForRowAtIndexPath: 中使用该标识符:就像为 xib 或情节提要创建的单元格一样。

[self.tableView registerClass:[MyCellSubclass class] forCellReuseIdentifier:@"MyIdentifier"];

于 2013-04-14T03:22:51.483 回答
1

这是一种方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Adjust the condition to match your needs
    if (indexPath.row == 0) {
        static NSString *Identifier1 = @"CellType1";
        // cell type 1
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier1];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Identifier1];

            // add subviews here
        }

        // set cell properties

        return cell;
    } else {
        static NSString *Identifier1 = @"CellType2";
        // cell type 2
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier2];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Identifier2];

            // add subviews here
        }

        // set cell properties

        return cell;
    }
}
于 2013-04-14T03:44:15.863 回答