我有一个牢房。每当单元格行中的文本等于"(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;
}
答案 0 :(得分:2)
首先,您是否单步执行代码并检查键的值的内容" user"和"文字"?
如果一切都符合预期,则应执行以下操作:
UITextAlignmentRight
替换为NSTextAlignmentRight
以使编译器警告静音。 NSTextAlignmentRight
和NSTextAlignmentLeft
,否则您将无法在回收的单元格中获得正确的更新。答案 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];
}
至于我,我最好做一个子类。