UIPopoverController中的奇怪UITableViewCell行为

时间:2012-11-29 14:34:16

标签: ios uitableview uipopovercontroller

我已经以编程方式创建了一个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行,则所有单元格在滚动后将返回到居中对齐。

0 个答案:

没有答案