0

.xib の UIViewController のコンテンツでポップアップする UIPopoverController をプログラムで作成しました。UIViewController には、(グループ化された) UITableView と UITableViewCell "プロトタイプ" が含まれています。ポップオーバーがポップアップすると、必要なすべてのセルに対してセル プロトタイプが複製されます。セルの数がポップオーバーのサイズを超えているため、すべてのセルをスクロールできます。

ポップオーバーがポップアップすると、すべてが見栄えがよくなり、セル ラベルはすべて左揃えになります。テーブルビューに触れてスクロールするとすぐに、すべてのセル ラベルが突然中央に配置されます。セルを外側にスクロールして戻すと、再び左揃えになります。すべてのセルを一度外側にスクロールした後、それらは残りの生涯にわたって左揃えのままになります。何が原因なのかわかりません...私のコードには、セルの配置を変更するものは何もありません。ここにいくつかのコードがあります:

UIViewController *editPopoverView = [[[ComponentViewEmptyEditPopover alloc] initWithNibName:@"ComponentViewEmptyEditPopover" bundle:nil] autorelease];
UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:editPopoverView];
aPopover.delegate = self;
[aPopover presentPopoverFromRect:sender.frame inView:self permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

ポップオーバービューコントローラーから

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *theCell = nil;
    switch (indexPath.section)
    {
        case 0:
            theCell = [tableView dequeueReusableCellWithIdentifier:@"typeCell"];
            if (theCell == nil)
            {
                NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:self.typeCell];
                theCell = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
            }

            switch (indexPath.row)
            {
                case 0:
                    [theCell.textLabel setText:@"Empty"];
                    break;
                //
            }
            break;
    }
    return theCell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 1)
        return 420;
    return 44;
}

なぜこれが起こっているのですか?これは細胞の再利用に何らかの関係があると思います。

更新:すでに推測したように、再利用に関係しています。私がする時

theCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"theCell"];

すべて正常に動作します。しかし、インターフェースビルダーでセルのデザインを変更できるようにしたい...

更新 2: dequeueReusableCellWithIdentifier 行をコメントアウトすると、すべてのセルがスクロールイン後に中央揃えに戻ります。

4

0 に答える 0