0

UITableViewCellのサブクラスを大量に作成しました。それぞれが追加のBGBaseTableViewCellクラスのサブクラスです。

高さを尋ねられたら、UITableViewCellの一般的なサイズをユーザーに伝えると便利だと思います。

これを行う1つの方法は、それを2回指定することです。

1つはxibでUITableViewCellを設計するとき、もう1つは一般的なサイズをハードコーディングしたときです。

これは設計上の欠陥です。xibで変更するときに、ハードコードされた標準サイズを変更することを忘れないでください。

私はそれを望んでいません。UITableViewCellをxibで設計したいのですが、クラスが初期化されたときにデフォルトの高さを保存したいと思います。

デフォルトの高さは、すべてのサブクラスで異なる必要があります。ただし、そのサブクラスのすべてのインスタンスで同じである必要があります。

単純なivarを使用する場合、すべてのインスタンスに対してその1つのデフォルトサイズを保存する必要があります。

静的変数を使用する場合、BGBaseTableViewCellの静的変数はそのすべてのサブクラスで使用されます。

だから私は何をすべきですか?

これは私が今していることです:

static CGFloat defaultHeightSet = 0; //this one is used by all subclasses. I want each subclass have it's own defaultHeightSet, but I want to specify that fact once.

+(void)initialize
{
    BGBaseTableViewCell * typical = [[self alloc]init];
    defaultHeightSet = typical.bounds.size.height;
}
+(CGFloat) defaultHeight
{
    return defaultHeightSet;
}
4

2 に答える 2

2

クラス全体で表示されますが、サブクラスでは表示されませんか? .m ファイルに対して次のコードを試すことができます。

@interface ClassYouNeed ()
static VariableClass* variableVisibleInClassButNotInSubclass;
@end

実装の近くにあるクラスの「非表示」カテゴリを作成するだけで、機能するはずです。

于 2012-12-06T09:01:26.743 に答える
0

なぜ私はそれを考えなかったのですか。

静的変数を辞書にして、クラス名をキーとして設定します:)

ご列席の皆様、あらゆる年齢のお子様。Sharen Eayrs プロダクションは、静的に保護された変数を誇らしげに提示します。

static NSMutableDictionary * defaultHeightDictionary= nil;
static NSMutableDictionary * defaultBoundsDictionary =nil;
//static CGFloat defaultHeightSet = 0;

+(void)initialize
{
    BGBaseTableViewCell * typical = [[self alloc]init];

    if (defaultHeightDictionary==nil) {
        defaultHeightDictionary = [NSMutableDictionary dictionary];
        defaultBoundsDictionary = [NSMutableDictionary dictionary];
    }
    [defaultHeightDictionary setValue:@(typical.bounds.size.height) forKey:NSStringFromClass([self class])];
    CGRect bounds = typical.bounds;

    NSValue * boundsValue = [NSValue valueWithCGRect:bounds];
    [defaultHeightDictionary setValue:boundsValue forKey:NSStringFromClass([self class])];


}
+(CGFloat) defaultHeight
{
    NSNumber * result = [defaultHeightDictionary valueForKey:NSStringFromClass([self class])];
    return result.floatValue;
}

+(CGRect) defaultBounds
{
    NSValue * result = [defaultBoundsDictionary valueForKey:NSStringFromClass([self class])];
    return [result CGRectValue];
}
于 2012-12-06T07:12:02.713 に答える