.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 行をコメントアウトすると、すべてのセルがスクロールイン後に中央揃えに戻ります。