-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
        }

...

他の UILABELS がここに追加されます。

そして、これが最終的な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 BringSubviewToFront: battery_percent];

甘い!

于 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 に答える