我创建了一个自定义单元格:
#import <UIKit/UIKit.h>
#import "SevenSwitch.h"
@interface cellaMain : UITableViewCell {
SevenSwitch *subscribed;
}
@property (nonatomic, retain) IBOutlet UIImageView *imageMain;
@property (nonatomic, retain) IBOutlet UILabel *titleMain;
@property (nonatomic, retain) SevenSwitch *subscribed;
@end
故事板将UIImage和Label添加到单元格中,但是在方法中添加了sevenswitch:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
使用此代码:
/* Switch Inside the cell */
cella.subscribed = [[SevenSwitch alloc] initWithFrame:CGRectMake(cella.frame.size.width-60, cella.frame.size.height / 2 - 12, 50, 25)];
cella.subscribed.offImage = [UIImage imageNamed:@"off.png"];
cella.subscribed.onImage = [UIImage imageNamed:@"on.png"];
cella.subscribed.thumbTintColor = [UIColor colorWithRed:(230/255.0) green:(230/255.0) blue:(230/255.0) alpha:1];
cella.subscribed.activeColor = [UIColor colorWithRed:(204/255.0) green:(204/255.0) blue:(204/255.0) alpha:1];
cella.subscribed.inactiveColor = [UIColor colorWithRed:(204/255.0) green:(204/255.0) blue:(204/255.0) alpha:1];
cella.subscribed.onTintColor = [UIColor colorWithRed:(204/255.0) green:(204/255.0) blue:(204/255.0) alpha:1];
cella.subscribed.isRounded = 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;
}
[cella.contentView addSubview:cella.subscribed];
/* End Switch Editing */
问题在于滚动滞后很多。 如何在cellaMain.m中添加SevenSwitch对象并让Storyboard添加图像和标签? 或者也许更好地添加到我的单元格中查看我的cellaMain.m文件中的所有对象(Label,Image和SeveSwitch)?
答案 0 :(得分:1)
问题是你在说
addSubview:cella.subscribed
每个单元格。但细胞可以重复使用。因此,即使已添加此子视图,也要添加此子视图。您需要使所有代码都有条件;如果子视图已经存在,请不要添加。
答案 1 :(得分:1)
添加 matt 回答。当您滚动UITableView
时,每次都会调用下面的函数,并且您正在反复初始化已经创建的开关,这实际上会导致滚动滞后。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
有一个非常简单的解决方案,请按照以下步骤进行操作
将UISwitch
放入自定义单元格xib中,然后按照下图中的说明进行操作
在IBOutlet
的.h类中创建UISwitch
的{{1}},记得导入'SevenSwitch.h'。当您为UISwitch创建IBOutlet时,您的代码应如下所示
CustomCell
现在,@property(nonatomic, strong) IBOutlet SevenSwitch *subscribed;
中的代码应如下所示
cellForRowAtIndexPath
你会注意到我已经删除了代码的第一行和最后一行,所以现在你的开关只从xib初始化而且只有一次,而在函数中你只是改变了属性。
希望它有所帮助。