使用IBOutlet对象的Xcode自定义单元格

时间:2014-03-12 18:08:42

标签: ios xcode uitableview lag

我创建了一个自定义单元格:

#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)?

2 个答案:

答案 0 :(得分:1)

问题是你在说

 addSubview:cella.subscribed

每个单元格。但细胞可以重复使用。因此,即使已添加此子视图,也要添加此子视图。您需要使所有代码都有条件;如果子视图已经存在,请不要添加。

答案 1 :(得分:1)

添加 matt 回答。当您滚动UITableView时,每次都会调用下面的函数,并且您正在反复初始化已经创建的开关,这实际上会导致滚动滞后。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

有一个非常简单的解决方案,请按照以下步骤进行操作

UISwitch放入自定义单元格xib中,然后按照下图中的说明进行操作

enter image description here

enter image description here

IBOutlet的.h类中创建UISwitch的{​​{1}},记得导入'SevenSwitch.h'。当您为UISwitch创建IBOutlet时,您的代码应如下所示

CustomCell

现在,@property(nonatomic, strong) IBOutlet SevenSwitch *subscribed; 中的代码应如下所示

cellForRowAtIndexPath

你会注意到我已经删除了代码的第一行和最后一行,所以现在你的开关只从xib初始化而且只有一次,而在函数中你只是改变了属性。

希望它有所帮助。