3

私はこのコードセグメントを持っています:

if (cell == nil)
{
    CGRect cellFrame = CGRectMake(0,0,300,250);
    cell = [[UITableViewCell alloc] initWithFrame:cellFrame
            reuseIdentifier:CellTableIndetifier];

    CGRect nameLabelRect = CGRectMake(0, 5, 70, 20);
    UILabel* nameLabel = [[UILabel alloc] initWithFrame:nameLabelRect];
    nameLabel.textAlignment = NSTextAlignmentCenter;
    nameLabel.text = @"Name";
    nameLabel.font = [UIFont boldSystemFontOfSize:12];
    [cell.contentView addSubview: nameLabel];

    CGRect colorLabelRect = CGRectMake(0, 25, 70, 20);
    UILabel* colorLabel = [[UILabel alloc] initWithFrame:colorLabelRect];
    colorLabel.textAlignment = NSTextAlignmentCenter;
    colorLabel.text = @"Color";
    colorLabel.font = [UIFont boldSystemFontOfSize:12];
    [cell.contentView addSubview: colorLabel];

    CGRect priceLabelRect = CGRectMake(0, 45, 70, 20);
    UILabel *priceLabel = [[UILabel alloc] initWithFrame:priceLabelRect];
    priceLabel.text = @"Price";
    priceLabel.textAlignment = NSTextAlignmentCenter;
    colorLabel.font = [UIFont boldSystemFontOfSize:12];
    [cell.contentView addSubview:priceLabel];

    CGRect nameValueRect = CGRectMake(80, 5, 200, 20);
    UILabel* nameValue = [[UILabel alloc] initWithFrame: nameValueRect];
    nameValue.tag = kNameValueTag;
    [cell.contentView addSubview:nameValue];

    CGRect colorValueRect = CGRectMake(80, 25, 200, 20);
    UILabel* colorValue = [[UILabel alloc] initWithFrame:colorValueRect];
    colorValue.tag = kColorValueTag;
    [cell.contentView addSubview:colorValue];

    CGRect priceValueRect = CGRectMake(80, 45, 200, 20);
    UILabel *priceValue = [[UILabel alloc] initWithFrame:priceValueRect];
    priceValue.tag = kPriceValueTag;
    [cell.contentView addSubview:priceValue];
}

それをサブクラスにしたいので、これらすべての行を書く必要はありません。 cell = CustomCell と言うだけで、サブクラスですべてを実行します。

4

5 に答える 5

10

UITableCellView のサブクラスの基本コードは次のとおりです。

#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell
{
}
@end


-----------------------------------------------------------


#import "CustomCell.h"

@implementation CustomCell


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

-(void)layoutSubviews{
    [super layoutSubviews];
}

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

    // Configure the view for the selected state
}*/

@end

タイプの新しいファイルを作成し、フィールドで指定すると自動生成されObjective-C ClassますUITableViewCellsubclass of

于 2013-06-21T12:23:22.470 に答える
3

以下は、私が通常行っていることです。セルを1つのView Controllerでのみ使用する場合は、View Controllerと同じファイルに入れるだけです。

@interface MyCell : UITableViewCell

@property (strong, nonatomic) UILabel* nameValue;
@property (strong, nonatomic) UILabel* colorValue;
@property (strong, nonatomic) UILabel* priceValue;

@end

@implementation MyCell

-(id)init {
    self = [super initWithStyle:whatever_style];

    // Create & position UI elements
    UILabel* nameLabel = [[UILabel alloc] init];
    nameLabel.frame = .... // frame, font, etc
    [self.contentView addSubview:nameLabel]

    self.nameValue = [[UILabel alloc] init];
    self.nameValue = .... // frame, font, etc
    [self.contentView addSubview:self.nameValue];

    // Do the same thing for color, price

    return self;
}

@end

nameValuecolorValue、を公開することで、priceValueそれらを外部 (つまり、UITableViewController) から変更できるようにします。他のラベルは静的であるため、公開しませんでした。特別な配置が必要でない限り、オーバーライドする必要はありませんlayoutSubviewsautoresizingMaskほとんどの場合で十分です。

于 2013-06-21T13:05:22.013 に答える
1

これを解決するために私が使用する2つの方法があります。

「クイック アンド ダーティ」は、必要なもの ( 、 、...) を使用UITableViewCellしてを設計し、各要素に一意のタグを設定することです。次に、 a をデキューすると、次のように要素を再利用できます。UITableViewUILabelUIImageViewUITableViewCell

UILabel *nameLabel = (UILabel*)[cell viewWithTag:NAME_LABEL_TAG];

if(!nameLabel) {

    // If the label does not exist, create it
    CGRect nameLabelRect = CGRectMake(0, 5, 70, 20);
    nameLabel = [[UILabel alloc] initWithFrame:nameLabelRect];
    nameLabel.textAlignment = NSTextAlignmentCenter;
    nameLabel.text = @"Name";
    nameLabel.font = [UIFont boldSystemFontOfSize:12];
    [cell.contentView addSubview: nameLabel];
}

または、(imo) 最良の方法は、カスタムUITableViewCellおよびサブクラスを作成するUItableviewCellことです。そこには優れたチュートリアルがあります: Custom UITableViewCell

于 2013-06-21T12:33:21.353 に答える
0

cellForRowAtIndexPath: delegate メソッドにこのようなものを入れていると思いますが、この場所からそれを削除しようとする理由がわかります。

New->File で新しい Objective-C クラスを作成し、サブビュー関連の呼び出しを layoutSubviews: メソッドに配置します。cellForRowAtIndexPath: テーブル ビュー デリゲートで、汎用の UITableViewCell の代わりにこのクラスを使用するようになりました。新しく作成したファイルをインポートすることを忘れないでください。

于 2013-06-21T12:26:15.267 に答える