样式表问题
我写了这样的代码:
+ (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 异常预处理 + 185 1 libobjc.A.dylib
0x012ee313 objc_exception_throw + 44 2 核心基础
0x0119c0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 3
CoreFoundation 0x0110b966 __转发 + 966 4 核心基础 0x0110b522 _CF_forwarding_prep_0 + 50 5 信友
0x000081f9 +[自定义TTTableSubtitleItemCell tableView:rowHeightForObject:] + 186 6 鑫友
0x000a6c92-[TTTableViewVarHeightDelegate tableView:heightForRowAtIndexPath:] + 156 7 UIKit
0x0064a6d5-[UISectionRowData
在此异常中,您可以看到 [TTDefaultStyleSheet myTitleFont]: 无法识别的选择器发送到实例 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
XYDefaultStyleSheet.m
#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
为什么总是告诉 [TTDefaultStyleSheet myTitleFont]
...如果问题确实是 myTitleFont
,则应该是 [XYDefaultStyleSheet myTitleFont]
,为什么是 TTDefaultStyleSheet
?
I wrote code like:
+ (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];
}
Got this exception:
2011-07-24 03:10:18.762 xinyou[15941:b303] -[TTDefaultStyleSheet
myTitleFont]: unrecognized selector sent to instance 0x5b5e120
2011-07-24 03:10:18.765 xinyou[15941:b303] * Terminating app due to
uncaught exception 'NSInvalidArgumentException', reason:
'-[TTDefaultStyleSheet myTitleFont]: unrecognized selector sent to
instance 0x5b5e120'
* Call stack at first throw: ( 0 CoreFoundation
0x0119a5a9 exceptionPreprocess + 185 1 libobjc.A.dylib
0x012ee313 objc_exception_throw + 44 2 CoreFoundation
0x0119c0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 3
CoreFoundation 0x0110b966 __forwarding + 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
In this exception you can see [TTDefaultStyleSheet myTitleFont]: unrecognized selector sent to instance 0x5b5e120
but actually myTitleFont
defined in XYDefaultStyleSheet
and I've imported XYDefaultStyleSheet.h
in my class. XYDefaultStyleSheet.h
and XYDefaultStyleSheet.m
are like:
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
XYDefaultStyleSheet.m
#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
why always tell [TTDefaultStyleSheet myTitleFont]
... if the problem is really myTitleFont
, it should be [XYDefaultStyleSheet myTitleFont]
, why TTDefaultStyleSheet
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
知道了!在 AppDelegate 中初始化我的样式表。
got it! Init my style sheet in AppDelegate.
这是对 @Jason Zhao 关于在 AppDelegate 中初始化的回答。
原始代码来自这里,其中有很多有关使用
TTStyleSheet
的有用信息:Three20 样式表 iPhone 教程
This is an answer to @Jason Zhao's answer about initialising within the
AppDelegate
.Original code is from here, which has a lot of useful information about using
TTStyleSheet
's:Three20 Stylesheets iPhone Tutorial