UITableView因特定对象而滞后
在我的应用程序主页上,我有一个iCarousel对象可以滚动图像。在这种情况下,有一个UITableView—表视图就是问题所在 最近,我在表视图的每个单元格中添加了一个SevenSwitch对象,从那以后,滚动的速度就慢了很多!这是我在tableView:cellForRowAtIndexPath:method中添加的代码:UITableView因特定对象而滞后,uitableview,lag,reusability,uiswitch,Uitableview,Lag,Reusability,Uiswitch,在我的应用程序主页上,我有一个iCarousel对象可以滚动图像。在这种情况下,有一个UITableView—表视图就是问题所在 最近,我在表视图的每个单元格中添加了一个SevenSwitch对象,从那以后,滚动的速度就慢了很多!这是我在tableView:cellForRowAtIndexPath:method中添加的代码: 有没有一种方法可以创建自定义对象,而不必每次都使用所有这些属性进行设置?表格视图中单元格的全部意义在于它们可以重复使用。这不仅应适用于单元格,还应适用于内容子视图 您必须
有没有一种方法可以创建自定义对象,而不必每次都使用所有这些属性进行设置?表格视图中单元格的全部意义在于它们可以重复使用。这不仅应适用于单元格,还应适用于内容子视图
您必须已经有一个cell子类,因此应该将交换机创建和配置代码放入该类中,并将其作为子视图添加到该类中。现在,每次创建/出列一个单元时,您都已经有了一个交换机,希望这在99%的时间里都能被重用,您所需要做的就是调用cella.subscribed.on=。。。使用适当的设置。我有一个diuitableviewcell.h
#import "SevenSwitch.h"
@interface cellaMain : UITableViewCell {
SevenSwitch *subscribed;
}
@property (nonatomic, retain) IBOutlet UIImageView *imageMain;
@property (nonatomic, retain) IBOutlet UILabel *titleMain;
@property (nonatomic,strong) SevenSwitch *subscribed;
并在mi.m文件中添加了这些方法
-(id) initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
subscribed = [[SevenSwitch alloc] initWithFrame:CGRectMake(frame.size.width-60, frame.size.height / 2 - 12, 50, 25)];
subscribed.offImage = [UIImage imageNamed:@"off.png"];
subscribed.onImage = [UIImage imageNamed:@"on.png"];
subscribed.thumbTintColor = [UIColor colorWithRed:(230/255.0) green:(230/255.0) blue:(230/255.0) alpha:1];
subscribed.activeColor = [UIColor colorWithRed:(204/255.0) green:(204/255.0) blue:(204/255.0) alpha:1];
subscribed.inactiveColor = [UIColor colorWithRed:(204/255.0) green:(204/255.0) blue:(204/255.0) alpha:1];
subscribed.onTintColor = [UIColor colorWithRed:(204/255.0) green:(204/255.0) blue:(204/255.0) alpha:1];
subscribed.isRounded = NO;
[self.contentView addSubview:subscribed];
}
return self;
}
-(void)layoutSubviews {
[super layoutSubviews];
}
在方法上,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
我删除了所有以前的代码,只留下这一个
cella.subscribed.tag = [[tempCat objectForKey:@"Id"] intValue];
[cella.subscribed addTarget:self action:@selector(changeSingleCategory:) forControlEvents:UIControlEventValueChanged];
if ([[tempCat objectForKey:@"Subscribed"] isEqualToString:@"Y"]) {
cella.subscribed.on = YES;
} else {
cella.subscribed.on = NO;
}
现在的问题是没有开关按钮出现。您是否进行过任何分析以找出造成延迟的原因?我非常确定七位开关会导致延迟,因为如果我将其从任何单元格中移除,延迟就会消失……您需要进行分析以准确找出它是什么。你总是在重新创建开关吗?只有在创建单元格时才应该创建开关…是的,我总是重新创建开关…第一次向下滚动表格视图时,开关就完成了,没有任何延迟。当我反复上下滚动表格视图时,延迟开始。
cella.subscribed.tag = [[tempCat objectForKey:@"Id"] intValue];
[cella.subscribed addTarget:self action:@selector(changeSingleCategory:) forControlEvents:UIControlEventValueChanged];
if ([[tempCat objectForKey:@"Subscribed"] isEqualToString:@"Y"]) {
cella.subscribed.on = YES;
} else {
cella.subscribed.on = NO;
}