样式表问题

发布于 2024-11-25 13:05:28 字数 3244 浏览 0 评论 0原文

我写了这样的代码:

+ (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 但实际上 myTitleFontXYDefaultStyleSheet 中定义,并且我已导入 XYDefaultStyleSheet.h我的班级。 XYDefaultStyleSheet.hXYDefaultStyleSheet.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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

祁梦 2024-12-02 13:05:28

知道了!在 AppDelegate 中初始化我的样式表。

got it! Init my style sheet in AppDelegate.

可是我不能没有你 2024-12-02 13:05:28

这是对 @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 的有用信息:

Three20 样式表 iPhone 教程

This is an answer to @Jason Zhao's answer about initialising within the AppDelegate.

- (void)applicationDidFinishLaunching:(UIApplication *)application {      
    // Override point for customization after app launch   
    [TTStyleSheet setGlobalStyleSheet:[[[CustomDefaultStyleSheet alloc]  
                                        init] autorelease]];  

    [window addSubview:[navigationController view]];  
    [window makeKeyAndVisible];  
}  

Original code is from here, which has a lot of useful information about using TTStyleSheet's:

Three20 Stylesheets iPhone Tutorial

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文