5

カスタム UITableViewCell を作成しようとしています。

XCode 4.6 インターフェイス ビルダーからStyle、セルのプロパティをカスタムに設定しました。ドラッグアンドドロップを使用してセルにコントロールを追加しました。2 つの UILables と 1 つの UIButton。このように見えます。

ここに画像の説明を入力

UITableViewCell から派生する別のクラスを作成して、3 つの UI 要素のプロパティを割り当て、そこで変更を加えました。セルのカスタム クラスを Identity Inspector からも DashboardCell として設定しました。

DashboardCell.h

#import <UIKit/UIKit.h>

@interface DashboardCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *numberOfMails;
@property (weak, nonatomic) IBOutlet UILabel *mailType;
@property (weak, nonatomic) IBOutlet UIButton *numberOfOverdueMails;

@end

DashboardCell.m

#import "DashboardCell.h"

@implementation DashboardCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        [self.numberOfOverdueMails setBackgroundColor:[UIColor colorWithRed:244/255.0f green:119/255.0f blue:125/255.0f alpha:1.0f]];
        [self.numberOfOverdueMails setTitle:@"lol" forState:UIControlStateNormal];
    }
    return self;
}

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

    // Configure the view for the selected state
}

@end

TableViewController で、カスタム セルを返すように次のメソッドを変更しました。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    DashboardCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[DashboardCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    return cell;
}

私の問題は、カスタム ボタンが表示されても、行った変更 (ボタンの背景色の変更、1 つの UILabel のタイトルの変更) が表示されないことです。ここで何が間違いだと思われますか?

4

2 に答える 2

5

インターフェイスビルダーを使用してセルを作成しているため、メソッドinitWithStyle:reuseIdentifier:は呼び出されません。

メソッドをオーバーライドして、背景色とタイトルを設定できますawakeFromNib.

メソッドでこれらを設定することもできますtableView:cellForRowAtIndexPath:

于 2013-02-28T04:30:15.217 に答える
2

xib またはストーリーボードからセルを取得すると、dequeueReusableCellWithIdentifier:forIndexPath:常にセルが返されます。存在する場合はそれを再利用し、存在しない場合は IB のテンプレートから作成します。したがって、if(cell ==nil)句が満たされることはなく、実際にはもう必要ありません。initメソッドを使用する場合は、次を使用しますinitWithCoder:

于 2013-02-28T05:21:32.663 に答える