-1

我有一个带有许多 UILabel 的以编程方式生成的 UITableView。每个添加的 UILabel 都应该在前面看到。一切正常,直到我添加最后的 UILabel,它出现在所有其他的后面。

我怎样才能把它带到前面?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
    if (cell == nil)
    {
        if( dbg )   NSLog( @"       - cell nil");
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: CellIdentifier];
        /* Though it's UITableViewCellStyleDefault, the three defaults (image, label, detail label) are nil
                if not set. */


        // UI controls must be preset for re-used, to prevent memory leak:

        // Allocate max. possible UI controls for this row, once per boot:
        int instance;
        for(  instance=0; instance < MAX_CELL_UILABEL; ++instance )
        {
            UILabel*   cell_UILabel = [[UILabel alloc] initWithFrame: CGRectZero];  // allocate next UI control
            [cell.contentView addSubview: cell_UILabel ];                           // add it permanently to the cell
            cell_UILabel.tag = BASE_UILABEL_TAG + instance;                         // assign unique ID for later lookup
        }

...

此处添加了其他 UILABEL。

而且,这是最终的 UILABEL,它出现在其余部分的后面,当它应该出现在前面时:

UILabel*   battery_percent = (UILabel*)[cell.contentView viewWithTag: BASE_UILABEL_TAG + ul++];
battery_percent.frame = CGRectMake  (x,y, w,h);
battery_percent.backgroundColor = [UIColor orangeColor];
battery_percent.textAlignment = NSTextAlignmentCenter; // NSTextAlignmentRight, NSTextAlignmentLeft
battery_percent.font = [UIFont systemFontOfSize: font_size];
battery_percent.textColor=[UIColor whiteColor];
battery_percent.numberOfLines=0;

// Show battery %:
battery_percent.text = [NSString stringWithFormat: @"%d%%", battery_charge_percent ];
4

4 回答 4

6
[cell bringSubviewToFront:label];
于 2013-09-29T01:21:38.487 回答
2

我在 Stackoverflow 的其他地方找到了答案:

[cell.contentView带来SubviewToFront:电池百分比];

甜的!

于 2013-09-29T01:21:26.660 回答
0

int instance;
for(  instance=0; instance < MAX_CELL_UILABEL; ++instance )
{
    UILabel*   cell_UILabel = [[UILabel alloc] initWithFrame: CGRectZero];  // allocate next UI control
    [cell.contentView addSubview: cell_UILabel ];                           // add it permanently to the cell
    cell_UILabel.tag = BASE_UILABEL_TAG + instance;                         // assign unique ID for later lookup
}

battery_percent标签的标签值为(BASE_UILABEL_TAG + MAX_CELL_UILABEL - 1)

当您稍后使用battery_percent标签时

UILabel*   battery_percent = (UILabel*)[cell.contentView viewWithTag: BASE_UILABEL_TAG + ul++];

此时ul的值是多少?

如果它不等于 (MAX_CELL_UILABEL - 1) 那么你抓住了错误的标签。

于 2013-09-29T01:26:32.680 回答
0

在这里我不确定你在哪里添加battery_percent标签......cell或者cell.contentView 所以我建议你使用这个。

[[battery_percent superView] bringSubviewToFront:battery_percent];

希望这会帮助你。

于 2013-09-29T05:55:30.763 回答