2016-11-08 5 views
0

カスタムセルを持つテーブルビューコントローラがあります。各タイプのセルについて、私はストーリーボードとクラスのプロトタイプセルを作成しました。テーブルビューとカスタムセルの予測不可能な動作

は、ここでは、細胞の一つだ:

enter image description here

セルは数が含まれている円形のボタンがあります。

私はこのような私のcellForRowAtIndexPathメソッドに番号の値を変更しようとしている:

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

    if (indexPath.row == 0) { 
     TrackMilstoneCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TrackMilstoneCell"]; 
     if (cell == nil) { 
      cell = [[TrackMilstoneCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TrackMilstoneCell"]; 
     } 
     cell.backgroundColor = cell.contentView.backgroundColor; 
     cell.milestoneNumber.backgroundColor = UIColorFromRGB(0xA875E1); 
     [cell.milestoneNumber.titleLabel setText:@"2"]; 

     return cell; 
    } ... 

しかし、私は非常に予期しない動作を取得しています。 tableviewがリロードされるたびに、時には1(ストーリーボードのデフォルト)、時には2(私が望むもの)が得られます。

enter image description here

これは私(TrackMilstoneCell)クラスのコードです:

#import "TrackMilstoneCell.h" 

@implementation TrackMilstoneCell 

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

-(void)layoutSubviews 
{ 
    [self viewSetup]; 
} 

-(void)viewSetup 
{ 

    self.milestoneNumber.layer.masksToBounds = NO; 
    self.milestoneNumber.layer.borderColor = [UIColor whiteColor].CGColor; 
    self.milestoneNumber.layer.borderWidth = 4; 
    self.milestoneNumber.layer.cornerRadius = self.milestoneNumber.bounds.size.width/2.0; 

} 

- (void)awakeFromNib 
{ 
    // Initialization code 
    [super awakeFromNib]; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 
    // Configure the view for the selected state 
} 



@end 
+0

これはセルを再利用しているため、完全な 'cellForRowAtIndexPath'メソッドを追加する必要があります。 –

+0

cellForRowAtIndexPathのelse部分はどこにありますか?そのセルの行番号が0になっていますか? – Windindi

答えて

0

kaushalさんの提案がトリックでした!

代わりに、このようにタイトルを設定する

[cell.milestoneNumber.titleLabel setText:@"2"] 

私がやった:

[cell.milestoneNumber setTitle:@"2" forState:UIControlStateNormal]; 

をそして今、それがうまく働いています。なぜ私は正確にはわかりませんが。

0

私はあなたがawakeFromNibに、ボタンのデフォルトの段階を設定するべきだと思います。カスタムテーブルビューセルクラスで :

- (void)awakeFromNib 
{ 
    // Initialization code 
    [super awakeFromNib]; 

    self.milestoneNumber.titleLabel.text = @""; 
} 
1

問題はそうここに最善の解決策は、このようなprepareForReuse方法でラベルリセットされ、再利用している:

- (void)prepareForReuse { 
    [super prepareForReuse]; 
    [self.milestoneNumber setTitle:@"" forState:UIControlStateNormal]; 
} 

を、セルを構成しながら、タイトルを次のように設定します。

[self.milestoneNumber setTitle:@"2" forState:UIControlStateNormal]; 
+1

ボタンテキストを使用して更新:self.milestoneNumber.titleLabel.textAlignment = NSTextAlignmentCenter; [ボタンsetTitle:@ "2" forState:UIControlStateNormal]; – kaushal

+0

ありがとうございます。私はこれを試みたが、うまくいかなかった。 –

+0

ありがとうございました!あなたのソリューションはうまくいった! –

関連する問題