我编写的代码如下:
+ (CGFloat)tableView:(UITableView*)tableView rowHeightForObject:(id)item {
CustomTTTableSubtitleItem* captionedItem = item;
CGFloat maxWidth = tableView.width - kHPadding*2;
CGSize titleSize = [captionedItem.title sizeWithFont:TTSTYLEVAR(myTitleFont) constrainedToSize:CGSizeMake(maxWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
}
得到了这个例外:
2011-07-24 03:10:18.762 xinyou [15941:b303] - [TTDefaultStyleSheet myTitleFont]:无法识别的选择器发送到实例0x5b5e120 2011-07-24 03:10:18.765 xinyou [15941:b303] *由于终止应用程序 未捕获的异常'NSInvalidArgumentException',原因: ' - [TTDefaultStyleSheet myTitleFont]:发送到的无法识别的选择器 实例0x5b5e120' * 在第一次投掷时调用堆栈:(0 CoreFoundation
0x0119a5a9 exceptionPreprocess + 185 1 libobjc.A.dylib
0x012ee313 objc_exception_throw + 44 2 CoreFoundation
0x0119c0bb - [NSObject(NSObject)doesNotRecognizeSelector:] + 187 3
CoreFoundation 0x0110b966 __ 转发 + 966 4 CoreFoundation 0x0110b522 _CF_forwarding_prep_0 + 50 5 xinyou
0x000081f9 + [CustomTTTableSubtitleItemCell tableView:rowHeightForObject:] + 186 6 xinyou
0x000a6c92 - [TTTableViewVarHeightDelegate tableView:heightForRowAtIndexPath:] + 156 7 UIKit
0x0064a6d5 - [UISectionRowData
在此异常中,您可以看到[TTDefaultStyleSheet myTitleFont]: unrecognized selector sent to instance 0x5b5e120
myTitleFont
,但实际XYDefaultStyleSheet
已在XYDefaultStyleSheet.h
中定义,我已在我的班级中导入XYDefaultStyleSheet.h
。 XYDefaultStyleSheet.m
和XYDefaultStyleSheet.h
就像:
#import "Three20/Three20.h"
@interface XYDefaultStyleSheet : TTDefaultStyleSheet
@property(nonatomic,readonly) UIColor* myHeadingColor;
@property(nonatomic,readonly) UIColor* mySubtextColor;
@property(nonatomic,readonly) UIColor* myTitleColor;
@property(nonatomic,readonly) UIFont* myTitleFont;
@property(nonatomic,readonly) UIFont* myHeadingFont;
@property(nonatomic,readonly) UIFont* mySubtextFont;
@end
#import "XYDefaultStyleSheet.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation XYDefaultStyleSheet
///////////////////////////////////////////////////////////////////////////////////////////////////
// styles
///////////////////////////////////////////////////////////////////////////////////////////////////
// public colors
- (UIColor*)myTitleColor {
return [UIColor blackColor];
}
- (UIColor*)myHeadingColor {
return RGBCOLOR(80, 110, 140);
}
- (UIColor*)mySubtextColor {
return [UIColor grayColor];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// public fonts
- (UIFont*)myTitleFont {
return [UIFont boldSystemFontOfSize:16];
}
- (UIFont*)myHeadingFont {
return [UIFont boldSystemFontOfSize:13];
}
- (UIFont*)mySubtextFont {
return [UIFont systemFontOfSize:12];
}
@end
XYDefaultStyleSheet.m
[TTDefaultStyleSheet myTitleFont]
为什么总要告诉myTitleFont
...如果问题确实是[XYDefaultStyleSheet myTitleFont]
,那么它应该是TTDefaultStyleSheet
,为什么{{1}}?
答案 0 :(得分:1)
答案 1 :(得分:0)
这是@Jason Zhao关于在AppDelegate
内初始化的答案的答案。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
[TTStyleSheet setGlobalStyleSheet:[[[CustomDefaultStyleSheet alloc]
init] autorelease]];
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
原始代码来自此处,其中包含许多有关使用TTStyleSheet
的有用信息: