UITableView差的滚动性能w / UITextField在子类单元格中

时间:2011-07-12 08:34:47

标签: objective-c cocoa-touch uitableview uitextfield

我一直在使用iPad上的UITableView,单元格中包含UITextFields,就像地址簿编辑模式一样。

我已经将UITableViewCell子类化为我自己的:FormCell,并在init中将UITextField * inputField的属性添加到单元格的contentView中。然后我在layoutSubviews中调整inputField的位置。

我有大约20行这些,我的滚动性能很差。当我只是来回滚动这些FormCell时,仪器配置文件提供大约15fps。相比之下,如果细胞只是常规类型,它显示50+ fps。

令人惊奇的是当我激活单元格中的一个inputField,键盘显示,并且我能够以40fps来回滚动,这非常流畅。相比之下,在编辑模式下,iPad上的地址簿以58 fps滚动。

任何人都可以通过激活单元格中的inputField来告知发生了什么以及如何获得更好的性能?

谢谢,

这是FormCell的代码:

@implementation FormCell

@synthesize inputField;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        //Initialization code
        inputField = [[UITextField alloc] init];
        inputField.font = [UIFont systemFontOfSize:20];
        inputField.minimumFontSize = 13;
        inputField.adjustsFontSizeToFitWidth = YES;

        inputField.autocapitalizationType=UITextAutocapitalizationTypeWords;
        inputField.clearButtonMode = UITextFieldViewModeWhileEditing;
        inputField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

        inputField.returnKeyType = UIReturnKeyNext;

        [self.contentView addSubview:inputField];
        self.textLabel.font = [UIFont boldSystemFontOfSize:16];
        [inputField release];
    }
    return self;
}

- (void)layoutSubviews{
    [super layoutSubviews];

    NSInteger cellWidth = self.contentView.frame.size.width;
    if (self.textLabel.text) {
        self.textLabel.frame = CGRectMake(20, 10, 100, 30);
        [inputField setFrame:CGRectMake(140, 10, cellWidth-160, 30)];
    }else{
        [inputField setFrame:CGRectMake(10, 10, cellWidth-20, 30)];
    }
}

- (void)prepareForReuse{
    [super prepareForReuse];
    self.textLabel.text = nil;
    self.detailTextLabel.text = nil;
    self.inputField.text = nil;
    self.inputField.placeholder = nil;
    self.inputField.enabled = YES;
    self.inputField.hidden = NO;
    self.accessoryView = nil;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
}

- (void)dealloc{
[super dealloc];
}

这是cellForRowAtIndexPath的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *InputCellID = @"InputCell";
    TextInputCell *cell = nil;
    cell = (FormCell *)[tableView dequeueReusableCellWithIdentifier:InputCellID];
    if (cell == nil) {
        cell = [[[FormCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:InputCellID] autorelease];
    }

    cell.textLabel.text = @"Name";
    cell.inputField.placeholder = @"Name";

    return cell;
}

编辑:

我只是想通了,因为我使用的是UIModalPresentationStylePageSheet,最大值。 FPS是25.如果我使用UIModalPresentationStyleFormSheet,最大值。 FPS为36. UIModalPresetnationStyleFullScreen的最大FPS为56。

任何人都可以向我解释为什么PageSheet的滚动性能如此糟糕?这就是我想要在FullScreen上使用的。

0 个答案:

没有答案