样式表问题

时间:2011-07-23 19:24:07

标签: three20

我编写的代码如下:

+ (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.hXYDefaultStyleSheet.mXYDefaultStyleSheet.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}}?

2 个答案:

答案 0 :(得分:1)

得到了它!在AppDelegate中初始化我的样式表。

答案 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的有用信息:

Three20 Stylesheets iPhone Tutorial