如何让每个 customLabel 在自己的行上?

Posted

技术标签:

【中文标题】如何让每个 customLabel 在自己的行上?【英文标题】:How to make each customLabel on their own line? 【发布时间】:2012-08-28 11:53:12 【问题描述】:

我尝试为我的 listView 中的书签功能创建一个包含 3 个标签、名称、书籍和章节的自定义 UIView。现在我希望标签位于 tableView 单元格中的不同行中。如果您查看下面的代码,哪种方法是最好的方法,或者您会怎么做才能在自己的行上制作标签?我是 Objective C 和 Iphone 开发的新手。

每个单元格的列表中的结果应该如下所示:

--------
name

book

chapter
--------

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

static NSString *CellIdentifier = @"BookmarkCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

Bookmark *item = [self.items objectAtIndex:indexPath.row];

NSArray *chunks = [item.name componentsSeparatedByString: @","];

NSString *name;
NSString *book;
NSString *chapter;

if ([chunks count] > 0)

    name = [chunks objectAtIndex:0];
    if ([chunks count] > 1)
    
        book = [chunks objectAtIndex:1];
        if ([chunks count] > 2)
        
            chapter = [chunks objectAtIndex:2];
        
    


UIView * pNewContentView= [[UIView alloc] initWithFrame:cell.contentView.bounds];
CGRect labelFrame= pNewContentView.bounds;
labelFrame.size.width= labelFrame.size.width * 0.25;

UILabel* pLabel1=[[UILabel alloc] initWithFrame:labelFrame];
[pNewContentView addSubview:pLabel1];

labelFrame.origin.x= labelFrame.size.width;
UILabel* pLabel2=[[UILabel alloc] initWithFrame:labelFrame];
[pNewContentView addSubview:pLabel2];

labelFrame.origin.x= labelFrame.origin.x + labelFrame.size.width;
UILabel* pLabel3=[[UILabel alloc] initWithFrame:labelFrame];
[pNewContentView addSubview:pLabel3];

[cell.contentView addSubview:pNewContentView];

[pLabel1 setText:(name)];    
[pLabel2 setText:(book)];  
[pLabel3 setText:(chapter)];       

//cell.textLabel.text = name;
//cell.detailTextLabel.text = book;

return cell;

【问题讨论】:

【参考方案1】:

将所有x 替换为y,将width 替换为height。检查输出并调整标签的高度和宽度以满足您的要求。

【讨论】:

【参考方案2】:

也许您在 Interface Builder 中创建自定义单元格然后在 cellForRowAtIndexPath 中设置您的单元格会更容易,有很多关于此的演示教程。

如果您想以编程方式执行此操作,则应如下所示:

UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake(10,15,300,20)];
name.text = @"some name";
UILabel *book = [[UILabel alloc] initWithFrame:CGRectMake(10,25,300,20)];
book.text = @"some book";
UILabel *chapter = [[UILabel alloc] initWithFrame:CGRectMake(10,35,300,20)];
chapter = @"chapter";

[cell.contentView addSubview:name];
[cell.contentView addSubview:book];
[cell.contentView addSubview:chapter];

【讨论】:

以上是关于如何让每个 customLabel 在自己的行上?的主要内容,如果未能解决你的问题,请参考以下文章

我可以让 Spark 仅在必要的行上运行 UDF 吗?

获取 clang 格式以将多行函数调用的右括号放在单独的行上?

Notepad++ XML 显示在单独的行上,如 Internet Explorer 显示 XML

Clang-format 语法在自己的行上获取初始化程序左大括号

Pyspark:如何仅在具有 NotNull 值的行上应用 UDF

在C# 与ms chart中,能否给每个柱状图的柱子下方添加标签