Можем ли мы определить частный 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 он будет работать из коробки).