我已经以编程方式创建了一个UIPopoverController,它从.xib中弹出UIViewController中的内容。 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];
来自popover viewcontroller
- (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行,则所有单元格在滚动后将返回到居中对齐。