Мені відомо, що це питання було задано раніше, але відповіді суперечать, і я плутаюся, тому, будь ласка, не спалахуйте мене.
Я хочу мати 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: Я хочу створити цей спеціальний вигляд у контролері перегляду та мати доступ для управління елементами подання. Я не хочу нового контролера перегляду.
Дякую
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 з ім'ям ручки? Чи повинен я встановити ручку в якомусь методі ініціалізації UIView у коді? Або це те, що я зробив нормально?
initWithDataSource
? У будь-якому випадку це буде спрацьовувати, навіть якщо ви дасте власнику "Nil".