我有一个iPad应用程序,我在UIView的initWithFrame:方法中设置了UILabel的阴影颜色。当我使用以下语法时:
m_label.shadowColor = [UIColor colorWithWhite:1.0 alpha:0.5];
我收到此编译器错误:
'''令牌
之前的预期标识符但是,当我使用以下语法时:
[m_label setShadowColor:[UIColor colorWithWhite:1.0 alpha:0.5]];
它无怨无悔地编译。
使用UILabel的其他属性的属性语法工作正常(shadowOffset,autoresizingMask,backgroundColor,font,textColor等)。
顺便说一句,当语句只是这样时,我得到相同的错误消息:
m_label.shadowColor;
然而,例如,这不会给出错误:
m_label.shadowOffset;
FWIW,整个方法如下:
#define shadowColor [UIColor colorWithWhite:1.00 alpha:0.5]
#define selectedColor [UIColor colorWithWhite:0.25 alpha:1.0]
#define unselectedColor [UIColor colorWithWhite:0.45 alpha:1.0]
#define CLOSEBUTTON_WIDTH 26.0
#define CLOSEBUTTON_HEIGHT 26.0
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
m_imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height)];
m_imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
m_imageView.backgroundColor = [UIColor clearColor];
m_imageView.image = [[UIImage imageNamed:@"tab.png"] stretchableImageWithLeftCapWidth:8.0 topCapHeight:0.0];
m_imageView.highlightedImage = [[UIImage imageNamed:@"tabSelected.png"] stretchableImageWithLeftCapWidth:8.0 topCapHeight:0.0];
m_label = [[UILabel alloc] initWithFrame:CGRectZero];
m_label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
m_label.backgroundColor = [UIColor clearColor];
m_label.font = [UIFont boldSystemFontOfSize:12.0];
m_label.textColor = unselectedColor;
m_label.shadowOffset = CGSizeMake(0.0, 1.0);
m_label.shadowColor = shadowColor; // Expected identifier before '[' token
[m_label setShadowColor:shadowColor];
m_closeButton = [[UIButton alloc] initWithFrame:CGRectMake(9.0, 1.0, CLOSEBUTTON_WIDTH, CLOSEBUTTON_HEIGHT)];
[m_closeButton setBackgroundImage:[UIImage imageNamed:@"tabClose.png"] forState:UIControlStateNormal];
[m_closeButton addTarget:self action:@selector(closeTab) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:m_imageView];
[self addSubview:m_label];
[self addSubview:m_closeButton];
self.backgroundColor = [UIColor clearColor];
}
return self;
}
有什么想法吗?
答案 0 :(得分:3)
#define shadowColor [UIColor colorWithWhite:1.00 alpha:0.5]
正在进行任务的双方扩展。
m_label.shadowColor = shadowColor;
评估为:
m_label.[UIColor colorWithWhite:1.00 alpha:0.5] = [UIColor colorWithWhite:1.00 alpha:0.5];
导致编译器错误。为#define使用不同的名称:
#define SHADOW_COLOR [UIColor colorWithWhite:1.00 alpha:0.5]
m_label.shadowColor = SHADOW_COLOR;
答案 1 :(得分:1)
两件事 - 您需要将以下内容添加到您的文件中:
#import <QuartzCore/QuartzCore.h>
第二个是你使用CGColorRef作为shadowColor,所以你应该做这样的事情:
m_label.layer.shadowColor = [[UIColor colorWithWhite:1.0 alpha:0.5] CGColor];
答案 2 :(得分:0)
为了回答原来的问题,我现在理解它好一点,听起来你不是以某种方式包括<UIKit/UILabel.h>
。它应该已经通过<UIKit/UIKit.h>
包含在项目的预编译头文件中。
您使用的是已发布的3.2 SDK,而不是预发布版本或4.0的当前测试版吗?如果没有,请确保使用正确的SDK。还要确保您的项目的.pch文件没有发生。你应该有<UIKit/UIKit.h>
的#import。
我在我自己的项目中使用3.2 SDK进行测试 - 我可以在UILabel上使用shadowColor属性,而不会出现您看到的错误。所以看起来你的结果可能已被破坏了。
答案 3 :(得分:0)
确保在您的界面中正确键入m_label
(即,其类为UILabel
)。如果编译器使用了错误的类型,则属性点语法不起作用,但Objective-C的动态特性将允许您向可能无法响应它们的对象发送消息(在这种情况下也应该发出警告) 。这就是-setShadowColor:
正在发挥作用的原因。