2014-03-12 50 views
1

我創建了一個自定單元:Xcode的定製細胞與IBOutlet中的對象和不

#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的和標籤由故事板添加到細胞,但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文件中的所有對象(標籤,圖像和SeveSwitch)?

回答

1

加入到馬特的答案。當您滾動UITableView時,下面的函數每次都會被調用,並且您正在一次又一次地初始化已經創建的開關,這實際上導致了滾動滯後。

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

有應該是一個非常簡單的解決方案,請按照下列步驟

在您的自定義單元格廈門國際銀行將一個UISwitch並按照以下

enter image description here

enter image description here

在圖像的說明

創建UISwitchIBOutletCustomCell的.h類中,請記住導入'SevenSwitch.h'。當你將爲UISwitch創建一個IBOutlet,你的代碼看起來應該像下面

@property(nonatomic, strong) IBOutlet SevenSwitch *subscribed; 

現在你在cellForRowAtIndexPath代碼應該如下

/* Switch Inside the cell */ 
    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; 
    } 

    /* End Switch Editing */ 

你會發現我已刪除了第一個和最後一個你的代碼行,所以現在你的開關只能從xib初始化,而且只有一次,在函數中你只是改變屬性。

希望它有幫助。

+0

明天一到我就去辦公室我嘗試這個解決方案...我認爲這可能是正確的... – prelite

+0

我忍不住要等到明天......一切正常,SevenSwitch是一個UIControl Class對象,故事板,而不是UISwitch我添加了一個UIView分配它SevenSwitch類...謝謝soooooo ... – prelite

+0

很高興爲您提供幫助..乾杯。 :-) – iphonic

1

的問題是,你說的

addSubview:cella.subscribed 

的每一個細胞。但細胞被重複使用。所以即使已經添加了這個子視圖也是如此。你需要使所有的代碼有條件的;如果它已經存在,請不要添加子視圖。