0

アプリの設定を作成しようとしています。ここで何が起こっているのかわかりません。UITableViewSyleGrouped があり、テーブルの各セクションに 1 行あります。私の特定の行では、人の名前が表示されます。それをクリックすると、選択する人々のリストを持つ新しいtableViewにプッシュされ、ポップバックするとラベルが更新されますが、小さい名前から大きい名前に移動するとラベルが切り捨てられます. アプリの設定を作成しようとしています。一部のフィールドは次のようになります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger row = [indexPath row];
    if (tableView == _settingsTableView) {
        UITableViewCell *cell = nil;

        NSNumber *aSection = [_tableArray objectAtIndex:indexPath.section];

        if ([aSection integerValue] == SOUNDS)
        {
            cell = [tableView dequeueReusableCellWithIdentifier:@"SwitchCell"];
            if (cell == nil)
            {
                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SwitchCell"] autorelease];
            }
            cell.textLabel.text = @"Sounds";
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
            cell.accessoryView = switchView;
            [switchView setOn:[[Settings sharedInstance] playSounds] animated:NO]; // initialize value from Settings
            [switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
            [switchView release];
        }
        else if ([aSection integerValue] == PERSON) {
            cell = [tableView dequeueReusableCellWithIdentifier:@"PersonCell"];
            if (cell == nil) {
                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"PersonCell"] autorelease];
            }
            Person *p = [_personArray objectAtIndex:row];
            cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", p.firstName, p.lastName];
                        NSLog(@"cL: %@", NSStringFromCGRect(cell.textLabel.frame));
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }
  return cell;
}

私の PERSON セクションは、ユーザーが People を変更できるようにします。didSelectRowAtIndexPath のそのコードは

else {
    Person *p = [_personArray objectAtIndex:row];
    NSUInteger oldRow = [_lastIndexPath row];
    if (oldRow != row) {
        dmgr.currentPerson = p;

        // Put checkmark on newly selected cell
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

        // Remove checkmark on old cell
        UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:_lastIndexPath];
        oldCell.accessoryType = UITableViewCellAccessoryNone;
        [_settingsTableView deselectRowAtIndexPath:_lastIndexPath animated:YES];
        self.LastIndexPath = indexPath;

        // Update the cell 
        NSIndexPath *path = [NSIndexPath indexPathForRow:0 PERSON];
        UITableViewCell *theCell = [_settingsTableView path];

        theCell.textLabel.text = [NSString stringWithFormat:@"%@ %@", p.firstName, p.lastName];
        [theCell setNeedsDisplay];                
        NSLog(@"ceLL: %@", NSStringFromCGRect(theCell.textLabel.frame));

    }
}

何が起こるかというと、ラベルをクリックするまでラベルが切り捨てられます。(たとえば、John Doe の代わりに John D...)。ラベルが更新されないのはなぜですか?

フレームを見てみましたが、それが関係しているかどうかはわかりません。私の出力は次のとおりです。

cL: {{0, 0}, {0, 0}}
ceLL: {{10, 11}, {76, 21}}
4

1 に答える 1

0

UITableViewCell の textLabel フィールドは通常の UILabel です。このプロパティを設定して、テキストが収まるように縮小できます。

 theCell.textLabel.adjustsFontSizeToFitWidth = YES;

最小フォントサイズを設定することもできます

 theCell.textLabel.minimumFontSize  = whatever

UILabel のドキュメントをご覧ください。これは非常に役立ちます。

于 2012-07-04T00:01:57.180 に答える