ฉันทราบว่ามีการถามคำถามนี้มาก่อน แต่คำตอบขัดแย้งกันและฉันสับสนดังนั้นโปรดอย่าทำให้ฉันตกใจ
ฉันต้องการมีUIView
คลาสย่อยที่ใช้ซ้ำได้ในแอปของฉัน ฉันต้องการอธิบายอินเทอร์เฟซโดยใช้ไฟล์ nib
ตอนนี้สมมติว่าเป็นมุมมองตัวบ่งชี้การโหลดที่มีตัวบ่งชี้กิจกรรมอยู่ในนั้น ฉันต้องการให้เหตุการณ์บางอย่างสร้างอินสแตนซ์ของมุมมองนี้และทำให้เคลื่อนไหวในมุมมองของตัวควบคุมมุมมอง ฉันสามารถอธิบายอินเทอร์เฟซของมุมมองได้อย่างไม่มีปัญหาโดยทางโปรแกรมสร้างองค์ประกอบโดยทางโปรแกรมและตั้งค่าเฟรมภายในวิธีการเริ่มต้นเป็นต้น
ฉันจะทำสิ่งนี้โดยใช้ปลายปากกาได้อย่างไร? การรักษาขนาดที่กำหนดในตัวสร้างอินเทอร์เฟซโดยไม่ต้องกำหนดกรอบ
ฉันทำแบบนี้แล้ว แต่ฉันแน่ใจว่ามันผิด (มันเป็นเพียงมุมมองที่มีตัวเลือกอยู่ในนั้น):
- (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
แก้ไข: ฉันต้องการสร้างมุมมองแบบกำหนดเองนี้ในตัวควบคุมมุมมองและมีสิทธิ์เข้าถึงเพื่อควบคุมองค์ประกอบของมุมมอง ฉันไม่ต้องการตัวควบคุมมุมมองใหม่
ขอบคุณ
แก้ไข: ฉันไม่รู้ว่านี่เป็นแนวทางปฏิบัติที่ดีที่สุดหรือไม่ฉันแน่ใจว่าไม่ใช่ แต่นี่คือวิธีที่ฉันทำ:
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) {
}];
การปฏิบัติที่ถูกต้องยังคงต้องการ
สิ่งนี้ควรทำโดยใช้ตัวควบคุมมุมมองและเริ่มต้นด้วยชื่อปลายปากกาหรือไม่ ฉันควรตั้งหัวปากกาในวิธีการเริ่มต้น UIView ในโค้ดหรือไม่ หรือเป็นสิ่งที่ฉันทำแล้วโอเค?
initWithDataSource
ใช่หรือไม่ อย่างไรก็ตามสิ่งนี้จะใช้ได้แม้ว่าคุณจะให้เจ้าของเป็น 'Nil'