UITableView,使用左+右对齐可以在同一个单元格中有2个字符串吗?

时间:2011-08-02 03:11:40

标签: objective-c ios cocoa-touch uitableview

假设我有一个字符串数组我在tableView中显示以下数据:

等级名称项目

第一个字段是一致的长度(4),但是中间字段是可变的,所以我希望能够做的是以某种方式分割单元格以使Item正确对齐。有一个简单的方法吗?

等级名称项目

所以

Sarg Bobmarley magic
Capt Huf axe
Peon Yumkru sword

变为

Sarg Bobmarley       magic
Capt Huf               axe
Peon Yumkru          sword

细胞方法:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    TableViewPracticeAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    cell.textLabel.text = [[appDelegate theArray] objectAtIndex:indexPath.row];
    cell.textLabel.font = [UIFont boldSystemFontOfSize:15];
}

任何想法或想法!

3 个答案:

答案 0 :(得分:3)

您必须制作自定义单元格。 iOS中没有NSAttributedString(更新:iOS 6带来NSAttributedString)。这很简单,这是一个例子:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

        UILabel *rank = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 100, 20];
        //Mess around with the rects, I am just merely guessing.
        [rank setTag:5];
        [[self contentView] addSubView:rank];
        [rank release];


        UILabel *item = [[UILabel alloc] initWithFrame:CGRectMake(110, 5, 220, 20];
        //Important
        [item setTextAlignment:UITextAlignmentRight];
        [item setTag:6];
        [[self contentView] addSubView:item];
        [item release];
    }

    UILabel *rank = (UILabel *)[cell viewWithTag:5];
    UILabel *item = (UILabel *)[cell viewWithTag:6];

    //And now set their texts...

}

答案 1 :(得分:2)

对于其他以后会偶然发现并尝试使用上述答案的人......首先尝试:UITableViewCellStyleValue1

这是iOS预定义的表格单元格样式,主标签为黑色(左对齐),辅助文本右侧为蓝色(右对齐)它们甚至可以是不同的字体。例如:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if( cell == nil ) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Cell1"] autorelease];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.textLabel.font = [UIFont fontWithName:@"myFont" size:30];
        cell.textLabel.adjustsFontSizeToFitWidth = YES;
    }
    cell.accessoryView = [Some widget you want on the right... or not];
    cell.textLabel.text = @"Some Left justified string in whatever font here (BLACK)";
    cell.detailTextLabel.text = @"Some right justified string here... in whatever font you want (BLUE)";
    return cell;
}

这就是它...... :)。

答案 2 :(得分:1)

UITableViewCell还有一个detailTextLabel属性,我相信默认情况下该属性是正确的。否则,您可以在代码中或使用具有两个标签的Interface Builder创建自定义单元格,其中一个标签具有右对齐文本。