Я знаю, что этот вопрос задавали раньше, но ответы противоречат друг другу, и я смущен, поэтому, пожалуйста, не пламени меня.
Я хочу иметь многократно используемый подкласс UIView
во всем моем приложении. Я хочу описать интерфейс, используя файл nib.
Теперь скажем, что это индикатор индикатора загрузки с индикатором активности в нем. Я хотел бы, чтобы в каком-то событии создалось это представление и оживилось представление представления контроллера. Я мог бы описать интерфейс вида без проблем программно, создавая элементы программно и устанавливая их фрейм внутри метода init и т.д.
Как я могу это сделать, используя наконечник? Ведение размера, заданного в построителе интерфейса, без необходимости устанавливать кадр.
Мне удалось сделать это так, но я уверен, что это неправильно (это просто представление с помощью сборщика):
- (id)initWithDataSource:(NSDictionary *)dataSource {
self = [super init];
if (self){
self = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", [self class]] owner:self options:nil] objectAtIndex:0];
self.pickerViewData = dataSource;
[self configurePickerView];
}
return self;
}
Но я переписываю себя, и когда я его создаю:
FSASelectView *selectView = [[FSASelectView alloc] initWithDataSource:selectViewDictionary];
selectView.delegate = self;
selectView.frame = CGRectMake(0, self.view.bottom + 50, [FSASelectView width], [FSASelectView height]);
Мне нужно вручную установить кадр, а не выбрать его из IB.
EDIT: Я хочу создать это настраиваемое представление в контроллере представления и иметь доступ к элементам управления. Я не хочу новый контроллер представления.
Спасибо
РЕДАКТИРОВАТЬ: Я не знаю, является ли это лучшей практикой, я уверен, что нет, но так я это сделал:
FSASelectView *selectView = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@",[FSASelectView class]] owner:self options:nil] objectAtIndex:0];
selectView.delegate = self;
[selectView configurePickerViewWithData:ds];
selectView.frame = CGRectMake(0, self.view.bottom + 50, selectView.width, selectView.height);
selectView.alpha = 0.9;
[self.view addSubview:selectView];
[UIView animateWithDuration: 0.25 delay: 0 options:UIViewAnimationOptionAllowUserInteraction |UIViewAnimationOptionCurveEaseInOut animations:^{
selectView.frame = CGRectMake(0, self.view.bottom - selectView.height, selectView.width, selectView.height);
selectView.alpha = 1;
} completion:^(BOOL finished) {
}];
Требуется правильная практика
Если это было сделано с помощью контроллера представления и init с именем nib? Должен ли я установить nib в некоторый метод инициализации UIView в коде? Или это то, что я сделал нормально?