UITableView因特定对象而滞后

UITableView因特定对象而滞后,uitableview,lag,reusability,uiswitch,Uitableview,Lag,Reusability,Uiswitch,在我的应用程序主页上,我有一个iCarousel对象可以滚动图像。在这种情况下,有一个UITableView—表视图就是问题所在 最近,我在表视图的每个单元格中添加了一个SevenSwitch对象,从那以后,滚动的速度就慢了很多!这是我在tableView:cellForRowAtIndexPath:method中添加的代码: 有没有一种方法可以创建自定义对象,而不必每次都使用所有这些属性进行设置?表格视图中单元格的全部意义在于它们可以重复使用。这不仅应适用于单元格,还应适用于内容子视图 您必须

在我的应用程序主页上,我有一个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;
}