在UITableView中对齐文本

时间:2014-07-19 13:40:08

标签: ios objective-c uitableview

我有一个牢房。每当单元格行中的文本等于"(null)"我希望标签位于单元格的右侧。

这是我目前的代码,但它并没有做任何事情。没有错误,它只是没有对齐到单元格的右侧。有什么想法吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"ChatListItem";
     NSDictionary *itemAtIndex = (NSDictionary *)[messages objectAtIndex:indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if([[itemAtIndex objectForKey:@"user"] isEqualToString:@"(null)"]){
        cell.textLabel.textAlignment=UITextAlignmentRight;
        cell.detailTextLabel.textAlignment=UITextAlignmentRight;
    }
    cell.textLabel.text = [itemAtIndex objectForKey:@"text"];
    cell.detailTextLabel.text = [itemAtIndex objectForKey:@"user"];

   return cell;
}

2 个答案:

答案 0 :(得分:2)

首先,您是否单步执行代码并检查键的值的内容" user"和"文字"?

如果一切都符合预期,则应执行以下操作:

  1. UITextAlignmentRight替换为NSTextAlignmentRight以使编译器警告静音。
  2. 明确设置NSTextAlignmentRightNSTextAlignmentLeft,否则您将无法在回收的单元格中获得正确的更新。
  3. 最后,确保标签的宽度是固定的。否则,标签的宽度将基于其内容,以便对齐(在标签内)失去其效果。

答案 1 :(得分:0)

您案例的唯一可行解决方案(当然不包含UITableViewCell的子类) 如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ChatListItem";

    NSDictionary *dict = [_tableData objectAtIndex:indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = dict[@"text"];
    cell.detailTextLabel.text = dict[@"user"];

    if ([dict[@"user"] isEqualToString:@"(null)"]) {

        [self performSelector:@selector(alignText:) withObject:cell afterDelay:0.0];
    }

    return cell;
}

- (void)alignText:(UITableViewCell*)cell
{
    CGRect frame = cell.textLabel.frame;
    frame.origin.x = cell.frame.size.width - (frame.size.width + 10.0);
    cell.textLabel.frame = frame;

    frame = cell.detailTextLabel.frame;
    frame.origin.x = cell.frame.size.width - (frame.size.width + 10.0);
    cell.detailTextLabel.frame = frame;

    [cell setNeedsDisplay];
}

至于我,我最好做一个子类。