を提示最初のテーブルビューが構築されたとき、私はこの問題に気づいてきました。私の場合、後続のビューはこの動作をしません。つまり、最初に作成されたテーブルビューの場合、tableView:cellForRowAtIndexPath:の後にフォントが明示的に初期化されます。。これを回避するために
一つの方法は、細胞のコンストラクタでフォントの適切な初期化を確実にするためである:
は、カテゴリ内の新しいUITableViewCellのコンストラクタを定義し、呼び出した後、あなたが選択した今までに何デフォルトでtextLabelとdetailTextLabelのための新しいフォントを作成しますスーパーinitWithStyle :.
二つの建設戦略:
のみ影響を受けるテーブルビューに、この新しいコンストラクタを使用して、 必ずあなたのデフォルトはOSのデフォルト値と一致しているします。
はまた、すべてのテーブルビューのための一貫性を確保するために この新しいコンストラクタを持つすべてのUITableViewCellのコンストラクタの呼び出しを交換し、 はポイントサイズのチェックを省略します。将来のOSの改訂でデフォルト値が変更される可能性があるので、私はこの戦略に賛成するでしょう。
ここではデフォルト値を参考にして使用できます。しかし、iOS 4.2から変更されていると思います。
また、シミュレータを使用してログを記録して、2番目のUITableViewで自分自身を発見することもできます。
例コード:
セルデフォルト:
#define kCellStyleSubtitleTextLabelFont @"Helvetica-Bold"
#define kCellStyleSubtitleTextLabelFontSize 18.0f
#define kCellStyleSubtitleDetailLabelFont @"Helvetica"
#define kCellStyleSubtitleDetailLabelFontSize 14.0f
#define kCellStyle1TextLabelFont @"Helvetica-Bold"
#define kCellStyle1TextLabelFontSize 17.0f
#define kCellStyle1DetailLabelFont @"Helvetica Bold"
#define kCellStyle1DetailLabelFontSize 15.0f
#define kCellStyle2TextLabelFont @"Helvetica-Bold"
#define kCellStyle2TextLabelFontSize 12.0f
#define kCellStyle2DetailLabelFont @"Helvetica"
#define kCellStyle2DetailLabelFontSize 15.0f
UITableViewCellのカテゴリ:のtableViewで
@interface UITableViewCell (fontDefaults)
-(id) initWithCellStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;
@end
#define kCheckPointSize 0
@implementation UITableViewCell (fontDefaults)
-(id) initWithCellStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [self initWithStyle:style reuseIdentifier:reuseIdentifier];
if(self == nil)
return nil;
switch (style) {
case UITableViewCellStyleValue1: { //Left aligned label on left and right aligned label on right with blue text (Used in Settings)
#if kCheckPointSize
if(self.textLabel.font.pointSize == 0)
#endif
self.textLabel.font = [UIFont fontWithName:kCellStyle1TextLabelFont size:kCellStyle1TextLabelFontSize];
#if kCheckPointSize
if(self.detailTextLabel.font.pointSize == 0)
#endif
self.detailTextLabel.font = [UIFont fontWithName:kCellStyle1DetailLabelFont size:kCellStyle1DetailLabelFontSize];
break;
}
case UITableViewCellStyleValue2: { //Right aligned label on left with blue text and left aligned label on right (Used in Phone/Contacts)
#if kCheckPointSize
if(self.textLabel.font.pointSize == 0)
#endif
self.textLabel.font = [UIFont fontWithName:kCellStyle2TextLabelFont size:kCellStyle2TextLabelFontSize];
#if kCheckPointSize
if(self.detailTextLabel.font.pointSize == 0)
#endif
self.detailTextLabel.font = [UIFont fontWithName:kCellStyle2DetailLabelFont size:kCellStyle2DetailLabelFontSize];
break;
}
case UITableViewCellStyleSubtitle: { //Left aligned label on top and left aligned label on bottom with gray text (Used in iPod).
#if kCheckPointSize
if(self.textLabel.font.pointSize == 0)
#endif
self.textLabel.font = [UIFont fontWithName:kCellStyleSubtitleTextLabelFont size:kCellStyleSubtitleTextLabelFontSize];
#if kCheckPointSize
if(self.detailTextLabel.font.pointSize == 0)
#endif
self.detailTextLabel.font = [UIFont fontWithName:kCellStyleSubtitleDetailLabelFont size:kCellStyleSubtitleDetailLabelFontSize];
break;
}
default: //default cell style
case UITableViewCellStyleDefault: { //Simple cell with text label and optional image view (behavior of UITableViewCell in iPhoneOS 2.x). No detailTextLabel
#if kCheckPointSize
if(self.textLabel.font.pointSize == 0) //
#endif
self.textLabel.font = [UIFont fontWithName:kCellStyle1TextLabelFont size:kCellStyle1TextLabelFontSize];
break;
}
}
return self;
}
@end
構成例:cellForRowAtIndexPath: `kCheckを何目的
static NSString *CellIdentifier = @"Style2Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithCellStyle:UITableViewCellStyleValue2
reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
PointSize'サービス? – Stas
@Stasこの質問は、最初に表示されたテーブルビューのフォントサイズをゼロにします。もし私が正確に覚えていれば;フォントサイズは、その後のテーブルビューでゼロにされませんでした。したがって、チェックを行うと、最初のテーブルビューのフォントが指定した値になります。後続のテーブルビューのフォントサイズは、システムのデフォルト値になります。また、kCheckPointSizeを1に設定した場合、この機能を継承する各セルは指定されたフォントサイズを使用します。理にかなっている? – stephen
ありがとう、今は明らかです。 – Stas