我有一个带有xib关联的ClassA:
@interface ClassA : UIViewController
@end
#import "ClassA.h"
@interface ClassA()
@property (nonatomic, weak) IBOutlet UIButton *myButton;
@end
@implementation ClassA
....
@end
知道我有一个继承自ClassA的ClassB女巫。 (UIViewController女巫xib)
@interface ClassB : ClassA
@end
@implementation ClassB
// Here i can't not access the private property myButton.
@end
我的问题是:
我知道所有私有类字段(Methodes,properties,..)都不能在继承的类中访问。我也知道如果我想访问我的属性,我只是在ClassA.h中声明它们,但我认为IBOUtlet和IBAction应该是私有的。为什么Objective C不能拥有类似Java关键字(私有,受保护,公共)的东西。 ?
我的另一个问题是,在ClassB.xib中,我已经将文件的所有者分配给了ClassB,在这里我可以看到myButton Outlet(在ClassA中被宣告为私有)并且我可以将它分配给ClassB.xib中的其他Button但我无法以编程方式执行此操作。
为什么xib(文件所有者)和Class的代码实现(继承可见性不同)之间存在差异?感谢
答案 0 :(得分:1)
我认为您可以在ClassB.xib中看到myButton
属性,因为Xcode只查找IBOutlets,然后在运行时,当加载nib时,它只使用setValue:forKey:
通过KVC设置该属性。您可以使用KVC从ClassB访问myButton
,但您不希望这样,否则您将该属性声明为public(在头文件中)。
答案 1 :(得分:0)
这不是Java。 如果它被声明为IBOutlet或IBAction,它为Interface Builder提供了可见性。