0

我有一个带有属性 UIView *view 的超类 O。

@interface O : NSObject
{
    UIView *view;
}

@property (nonatomic, weak) UIView *view;

@end

UIView 子类:

@interface myView : UIView

@property (nonatomic, weak) UIColor color;

然后我有一个 O 的子类,它的 init 中有以下内容:

view = [[myView alloc] init];
view.color = [UIColor redColor];

color 是一些自定义绘图代码中使用的 myView 的一个属性。

这会导致编译器崩溃,因为 UIView 没有属性颜色。我将能够使用 setColor 方法设置值,但是能够通过点语法访问该属性会很好。

有没有办法做到这一点?

4

4 回答 4

1

编辑:

在您的特定情况下,您需要声明viewmyView *view而不是UIView在您的 .h 文件中。那么您将可以访问自定义颜色属性。

于 2012-08-01T05:54:47.863 回答
0

试试这个:

self.view.backgroundColor=[UIColor redColor];
于 2012-08-01T05:51:55.587 回答
0

你将如何使用setColor:?我没有看到这样的方法UIView。您可以使用backgroundColor属性,并使用点和方法表示法访问它。

至于点与方法表示法,分配给 a 的所有属性.propertyName都与调用setPropertyName:. 仅当setSomething不是 a时才可以调用点表示法@property,而只是显式声明的方法,但是在 Apple 的框架中,我认为这是不可能的。

于 2012-08-01T05:53:10.570 回答
0

您可以声明您的Ousing myView

哦:

@class myView;

@interface O: NSObject {
    myView *view;
}
....
@end

唵:

#import "myView.h"

....

在这种情况下,通过声明@class myView您不需要导入哪个好。您只是告诉编译器还有其他地方。现在您可以使用实例的自定义属性。myView.hO.hmyViewmyView

另一件事,如果您确定它O.view始终是类型myView,您可以像这样调用 setter:

[view setColor:theColor];

但我不推荐这样做,因为如果view将是其他UIView类的实例,您将收到错误,即没有选择器setColor

我强烈建议您view使用适当的类声明属性。

于 2012-08-01T06:45:23.043 回答