Можем ли мы определить частный IBOutlet?

Предоставляет ли iOS разработчику определение частного IBOutlet. Например, в viewController есть несколько кнопок, и я хочу что-то сделать с этими кнопками как в построителе интерфейса, так и в коде. Однако я не хочу, чтобы другие классы получили доступ к этим кнопкам. Могу ли я определить некоторые "private" 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 вместе, у меня есть такое решение.

в .h файле

    @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

Ответы

Ответ 1

Добавьте свойства в категорию в верхней части файла .m:

@interface MyViewController ()

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

@end

Фактически, так вы можете настроить свойство как readonly в файле .h и переопределить его как свойство readwrite в файле .m, чтобы вы могли иметь частные сеттеры.

Ответ 2

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

@end

Этот код позволяет иметь выход без свойства, доступ к которому могут получить другие пользователи.

Ответ 3

В принятом ответе выше есть проблема, что 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, определенные таким образом, видны только классам, включая заголовочный файл Protected. Обычно это только сам класс.

Как только категория находится в защищенном файле заголовка, Interface Builder сможет найти выходы. (Для XCode3 вам нужно перетащить файл -Protected.h в IB, в Xcode4 он будет работать из коробки).