Я сделал нестандартное представление.
Я поставил два стартовых методов,
1. initWithFrame (для инициализации кода)
2. initWithCoder (для раскадровки инициализации)Установить объект делегата для пользовательского класса
В моем пользовательском классе
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// [self setUp] method contain the code to run the delegate.
[self setUp];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// [self setUp] method contain the code to run the delegate.
[self setUp];
self.backgroundColor = [UIColor greenColor];
}
return self;
}
Затем я добавляю вид на раскадровки и изменить класс в инспекторе идентификации. Я подключаю представление к свойству viewcontroller.
Я установил делегата и данные источника
На мой взгляд, контроллер
@interface ViewController() <UIControlViewDataSource, UIControlViewDelegate>
@property (weak, nonatomic) IBOutlet UIControlView *controlView;
@end
- (void)viewDidLoad
{
self.controlView.delegate = self;
self.controlView.dataSource = self;
}
initWithCoder работает до того viewDidLoad,
Из-за этого делегат никогда не будет работать, потому что в initWithCoder в моей пользовательский класс выполняется до того, как я установил делегат в viewDidLoad в контроллере просмотра.
И свойство делегата будет иметь значение NULL.
Как я могу установить делегат?
Почему вы думаете, прежде чем устанавливать делегат, который не должен вызывать initWithCoder? – Pawan
@pawan initWithCoder запускает метод [self setUp], который содержит код для объединения данных из метода делегата, если делегат еще не установлен, метод не может быть запущен –