2013-11-25 58 views
0

我已經做了正常UISwitch編程目標C一個UITableViewCell內,當我走在模擬器上查看它,我看到這一點:UISwitch圖形神器

Graphics Glitch

爲什麼會發生的事情,我怎麼能修理它?

這裏是因爲我是如何實現它的代碼:

UISwitch類:

#import <Foundation/Foundation.h> 

@interface SwitchCell : UITableViewCell 
+ (SwitchCell*)SwitchCellMake; 
@end 


@implementation SwitchCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

+ (SwitchCell*)SwitchCellMake{ 
    SwitchCell * newSwitchCell = [[SwitchCell alloc]init]; 

    UISwitch * cellSwitch = [[UISwitch alloc] init]; 
    [newSwitchCell.contentView addSubview:cellSwitch]; 
    [cellSwitch setCenter:CGPointMake(600, 30)]; 

    return newSwitchCell; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated{ 
    [super setSelected:selected animated:animated]; 
} 

@end 

viewDidLoad中:

- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    [arySwitchCells addObject:[SwitchCell SwitchCellMake]]; 
} 

而且的cellForRowAtIndexPath方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    SwitchCell *cellSwitchCell = (SwitchCell *)[tableView dequeueReusableCellWithIdentifier:@"SwitchCell"]; 
    cellSwitchCell = [arySwitchCells objectAtIndex:indexPath.row]; 
    return cellSwitchCell; 
} 
+0

什麼是SwitchCell類型?它是UITableViewCell的子類嗎?這段代碼來自tableView:cellForRowAtIndexPath方法嗎? – Greg

+0

SwitchCell是UITableViewCell的直接子類,沒有任何修改。這是爲tableView:cellForRowAtIndexPath。 – Necro

+0

使用'[[UISWitch alloc] init]'將交換機創建爲默認大小。然後根據需要更新其框架的原點。你的單元格是否真的足夠寬以達到860的「x」值?這必須是僅限風景的iPad應用程序。 – rmaddy

回答

1

爲什麼你t是否每次都分配這個單元格?你應該把它出列。我試試這個代碼,它適用於我:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    UISwitch * cellSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(200, 10, 50, 50)]; 
    [cell.contentView addSubview:cellSwitch]; 

    return cell; 
} 

只記得設置單元標識符。

// EDITED

我會刪除SwitchCellMake方法,並添加UISwitch的內容查看在initWithStyle:reuseIdentifier方法(或利用initWithCoder如果你用筆尖):

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     self.cellSwitch = [[UISwitch alloc] init]; 
     [self.contentView addSubview:self.cellSwitch]; 
    } 
    return self; 
} 

正如你可以看到cellSwitch是屬性,以便您可以設置在layoutSubview框架(你可以處理的方向已經發生了變化):

-(void)layoutSubviews 
{ 
    [self.cellSwitch setFrame:CGRectMake(200, 10, 50, 50)]; 
} 

之後,僅僅註冊我的細胞ñ情節串連圖板或viewDidLoad中(如果你不使用筆尖),並改變你的init方法來:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    SwitchCell *cellSwitchCell = (SwitchCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"]; 

    cellSwitchCell.textLabel.text = [NSString stringWithFormat:@"Row: %d", indexPath.row]; 

    return cellSwitchCell; 
} 

這是我會怎麼做。

+0

我不使用xib/nib。 – Necro

+0

你能解釋這個答案如何解決這個問題嗎?你怎麼知道這個單元格是「每一次」分配的?這個問題沒有顯示足夠的背景知道這一點。 – rmaddy

+0

@Necro表示SwitchCell是UITableViewCell的直接子類。所以他不應該使用[[alloc] init],但他應該使用initWithStyle:reuseIdentifier。我假設他在分配代碼時犯了錯誤。我會推薦你​​嘗試註冊單元格[self.tableView registerClass:[SwitchCell class] forCellReuseIdentifier:@「cell」];在viewDidLoad中:並重復使用 – Greg