Bu sorunun daha önce sorulduğunun farkındayım ama cevaplar çelişkili ve kafam karışık, bu yüzden lütfen beni alevlendirmeyin.
UIView
Uygulamamda yeniden kullanılabilir bir alt sınıfa sahip olmak istiyorum . Arayüzü bir uç dosyası kullanarak tanımlamak istiyorum.
Şimdi bunun, içinde bir etkinlik göstergesi olan bir yükleme göstergesi görünümü olduğunu varsayalım. Bir olayda bu görünümü somutlaştırmak ve bir görünüm denetleyicisinin görünümüne canlandırmak istiyorum. Görünümün arayüzünü programatik olarak, öğeleri programlı olarak oluşturarak ve çerçevelerini bir init yönteminin içine yerleştirerek vb.
Bunu bir uç kullanarak nasıl yapabilirim? Arayüz oluşturucuda verilen boyutu çerçeve ayarlamanıza gerek kalmadan korumak.
Bunu böyle yapmayı başardım, ama eminim yanlıştır (sadece içinde seçici olan bir manzara):
- (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;
}
Ama kendimin üzerine yazıyorum ve bunu örneklediğimde:
FSASelectView *selectView = [[FSASelectView alloc] initWithDataSource:selectViewDictionary];
selectView.delegate = self;
selectView.frame = CGRectMake(0, self.view.bottom + 50, [FSASelectView width], [FSASelectView height]);
Çerçeveyi IB'den almak yerine manuel olarak ayarlamam gerekiyor.
DÜZENLE: Bu özel görünümü bir görünüm denetleyicisinde oluşturmak ve görünümün öğelerini kontrol etmek için erişim sahibi olmak istiyorum. Yeni bir görüntü denetleyicisi istemiyorum.
Teşekkürler
DÜZENLEME: Bunun en iyi uygulama olup olmadığını bilmiyorum, eminim öyle değil, ama ben böyle yaptım:
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) {
}];
Doğru uygulama hala isteniyor
Bu, uç adı ile bir görünüm denetleyicisi ve init kullanılarak mı yapılmalıydı? UIView başlatma yönteminde uçları kodda ayarlamalı mıyım? Yoksa yaptığım şey tamam mı?
initWithDataSource
mi? Her neyse, sahibine 'Nil' olarak verseniz bile bu çalışacaktır.