Saya sadar pertanyaan ini telah ditanyakan sebelumnya tetapi jawabannya bertentangan dan saya bingung, jadi tolong jangan nyalakan saya.
Saya ingin memiliki UIView
subclass yang dapat digunakan kembali di seluruh aplikasi saya. Saya ingin menjelaskan antarmuka menggunakan file pena.
Sekarang katakanlah itu adalah tampilan indikator pemuatan dengan indikator aktivitas di dalamnya. Saya ingin pada beberapa acara untuk membuat contoh tampilan ini dan menganimasikan ke tampilan pengontrol tampilan. Saya bisa menggambarkan antarmuka tampilan tanpa masalah secara terprogram, membuat elemen secara terprogram dan mengatur bingkai mereka di dalam metode init, dll.
Bagaimana saya bisa melakukan ini menggunakan pena? Mempertahankan ukuran yang diberikan dalam pembuat antarmuka tanpa harus menyetel bingkai.
Saya telah berhasil melakukannya seperti ini, tetapi saya yakin itu salah (ini hanya tampilan dengan picker di dalamnya):
- (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;
}
Tapi saya menimpa diri sendiri, dan ketika saya memberi contoh:
FSASelectView *selectView = [[FSASelectView alloc] initWithDataSource:selectViewDictionary];
selectView.delegate = self;
selectView.frame = CGRectMake(0, self.view.bottom + 50, [FSASelectView width], [FSASelectView height]);
Saya harus mengatur frame secara manual daripada mengambilnya dari IB.
EDIT: Saya ingin membuat tampilan kustom ini dalam pengontrol tampilan, dan memiliki akses untuk mengontrol elemen tampilan. Saya tidak ingin pengontrol tampilan baru.
Terima kasih
EDIT: Saya tidak tahu apakah ini praktik terbaik, saya yakin tidak, tapi beginilah cara saya melakukannya:
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) {
}];
Praktek yang benar masih dibutuhkan
Haruskah ini dilakukan dengan menggunakan pengontrol tampilan dan init dengan nama pena? Haruskah saya menyetel ujung pena dalam beberapa metode inisialisasi UIView dalam kode? Atau apa yang telah saya lakukan baik-baik saja?
initWithDataSource
? Bagaimanapun ini akan berhasil bahkan jika Anda memberi pemilik sebagai 'Nihil'.