我们可以定义私人IBOutlet吗?

时间:2011-05-24 14:01:36

标签: iphone objective-c xcode ios

iOS允许开发人员定义私有IBOutlet。例如,viewController中有几个按钮,我想在“界面”构建器和代码中对这些按钮执行某些操作。但是我不希望其他类访问这些按钮。我可以为这个按钮定义一些“私人”IBOutlets

示例代码:

@interface myViewController : UIViewController<
{
@private:  
    UIButton *o_Button1;
    UIButton *o_Button2;
}

//Can I have these outlets as private???
@property (nonatomic, retain) IBOutlet UIButton *Button1;
@property (nonatomic, retain) IBOutlet UIButton *Button2;

@end

=============================================== ================

得到一个解决方案。希望它会对你有所帮助。

将Abizern和JustSid的想法结合起来,我有这样的解决方案。

<。>文件中的

    @interface myViewController : UIViewController
    {
    @private
         IBOutlet UIButton *Button1;
         IBOutlet UIButton *Button2;
    }

    @end

和.m文件

    @interface MyViewController ()

    @property (nonatomic, retain) UIButton *Button1;
    @property (nonatomic, retain) UIButton *Button2;

    @end  
    ...
    @synthesize Button1, Button2;

感谢Abizern和JustSid的帮助

3 个答案:

答案 0 :(得分:8)

在.m文件顶部的类别中添加属性:

@interface MyViewController ()

@property (nonatomic, retain) IBOutlet UIButton *Button1;
@property (nonatomic, retain) IBOutlet UIButton *Button2;

@end

实际上,这就是如何在.h文件中将属性设置为只读,并将其重新声明为.m文件中的readwrite属性 - 这样您就可以拥有私有的setter。

答案 1 :(得分:4)

@interface myViewController : UIViewController
{
@private
    IBOutlet UIButton *o_Button1;
    IBOutlet UIButton *o_Button2;
}

@end

此代码允许您使插座没有其他人可能访问的属性。

答案 2 :(得分:4)

上面接受的答案存在IB无法看到网点的问题。

我使用的方法是创建一个名为MyViewController-Protected.h的文件,并在其中放置具有私有IBOutlets的类别。在MyViewController.m中包含-Protected.h而不是常规的。

受保护的文件可能如下所示:

// MyViewController-Protected.h
// Protected extensions to MyViewController

#import "MyViewController.h"

@interface MyViewController ()

@property (nonatomic, retain) IBOutlet UIButton *Button1;
@property (nonatomic, retain) IBOutlet UIButton *Button2;

@end

以这种方式定义的IBOutlets仅对包括受保护头文件的类可见。这通常只是班级本身。

一旦类别位于受保护的头文件中,Interface Builder就能找到这些出口。 (对于XCode3,你必须将-Protected.h文件拖到IB,在Xcode4中它将开箱即用)。