Можем ли мы определить частный IBOutlet? - PullRequest
14 голосов
/ 24 мая 2011

Позволяет ли 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 вместе, у меня есть решение, подобное этому.

в файле .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

Ответы [ 3 ]

8 голосов
/ 24 мая 2011

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

@interface MyViewController ()

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

@end

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

4 голосов
/ 21 августа 2011

В принятом ответе есть проблема, заключающаяся в том, что 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 он будет работать из коробки).

4 голосов
/ 24 мая 2011
@interface myViewController : UIViewController
{
@private
    IBOutlet UIButton *o_Button1;
    IBOutlet UIButton *o_Button2;
}

@end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...