0

我有一个 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;
}

有任何想法吗?

4

4 回答 4

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;
于 2010-04-30T16:09:13.067 回答
1

两件事 - 您需要将以下内容添加到您的文件中:

#import <QuartzCore/QuartzCore.h>

第二个是你使用 CGColorRef 作为 shadowColor,所以你应该做这样的事情:

m_label.layer.shadowColor = [[UIColor colorWithWhite:1.0 alpha:0.5] CGColor];

于 2010-04-29T00:01:16.487 回答
0

现在我已经更好地理解了最初的问题,为了尝试回答原始问题,听起来您并没有<UIKit/UILabel.h>以某种方式包括在内。它应该已经包含<UIKit/UIKit.h>在您项目的预编译头文件中。

您是否使用已发布的 3.2 SDK 而不是预发布版本之一或当前的 4.0 测试版?如果没有,请确保您使用的是正确的 SDK。还要确保项目的 .pch 文件没有发生任何事情。你应该有一个#import for <UIKit/UIKit.h>

我刚刚在自己的项目中使用 3.2 SDK 进行了测试——我可以在 UILabel 上使用 shadowColor 属性,而不会出现您看到的错误。所以看起来你这边可能有什么东西坏了。

于 2010-04-30T15:25:58.657 回答
0

确保m_label在您的界面中正确键入(即,它的类是UILabel)。如果编译器使用了错误的类型,属性点语法将不起作用,但 Objective-C 的动态特性将允许您向可能不响应它们的对象发送消息(在这种情况下也应该发出警告) . 这就是为什么-setShadowColor:工作。

于 2010-04-30T15:30:49.277 回答