1

UIAppearanceContainer协议参考的 iOS 文档说:

“要参与外观代理 API,请在标头中使用 UI_APPEARANCE_SELECTOR 标记外观属性访问器方法。”

但是,例如,当我打开 UIButton.h 时,我在任何地方都找不到UI_APPEARANCE_SELECTOR,尽管我可以使用类似这样的东西而不会出现问题:

    [[UIButton appearance] setBackgroundImage:[[UIImage imageNamed:@"UIButton"] resizableImageWithCapInsets:UIEdgeInsetsMake(5.0, 5.0, 5.0, 5.0)] forState:UIControlStateNormal];

谁能告诉我发生了什么:D?

4

2 回答 2

2

-[UIButton setBackgroundImage:resizableImageWithCapInsets:]不是属性而是方法。因此,Apple 文档中的引用仍然有效。

UI_APPEARANCE_SELECTOR 是一个简单的#define,我想只是提示编译器使用@property 做一些特殊的事情。

于 2012-06-19T15:54:28.690 回答
1

您找不到它,因为访问器继承自UIViewUIButton继承自;UIControl: UIView: UIResponder:)NSObject。所以当你这样做时,你会[UIButton appearance]得到传递类的外观代理,只是因为UIView采用了UIAppearanceandUIAppearanceContainer协议。我希望这是有道理的。

PS。如果你查看 exampleUIBarButtonItem的头文件,你会看到UI_APPEARANCE_SELECTOR那里有。

于 2012-06-19T16:11:37.403 回答