我一直在使用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上使用的。