Tôi biết câu hỏi này đã được hỏi trước đây nhưng các câu trả lời mâu thuẫn và tôi bối rối, vì vậy xin vui lòng không châm lửa cho tôi.
Tôi muốn có một UIView
lớp con có thể sử dụng lại trong ứng dụng của mình. Tôi muốn mô tả giao diện bằng tệp nib.
Bây giờ giả sử đó là chế độ xem chỉ báo tải với chỉ báo hoạt động trong đó. Tôi muốn trong một số sự kiện để khởi tạo chế độ xem này và tạo hoạt ảnh trong chế độ xem của bộ điều khiển chế độ xem. Tôi có thể mô tả giao diện của chế độ xem không có vấn đề gì theo lập trình, tạo các phần tử theo lập trình và đặt khung của chúng bên trong một phương thức init, v.v.
Làm thế nào tôi có thể làm điều này bằng cách sử dụng một ngòi? Duy trì kích thước đã cho trong trình tạo giao diện mà không cần phải thiết lập khung.
Tôi đã quản lý để làm điều đó như thế này, nhưng tôi chắc chắn là sai (đó chỉ là một chế độ xem với một bộ chọn trong đó):
- (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;
}
Nhưng tôi đang ghi đè bản thân và khi tôi khởi tạo nó:
FSASelectView *selectView = [[FSASelectView alloc] initWithDataSource:selectViewDictionary];
selectView.delegate = self;
selectView.frame = CGRectMake(0, self.view.bottom + 50, [FSASelectView width], [FSASelectView height]);
Tôi phải tự thiết lập khung hình chứ không phải chọn nó từ IB.
CHỈNH SỬA: Tôi muốn tạo chế độ xem tùy chỉnh này trong bộ điều khiển chế độ xem và có quyền truy cập để kiểm soát các phần tử của chế độ xem. Tôi không muốn một bộ điều khiển chế độ xem mới.
Cảm ơn
CHỈNH SỬA: Tôi không biết đây có phải là phương pháp hay nhất hay không, tôi chắc chắn là không, nhưng đây là cách tôi đã là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) {
}];
Thực hành đúng vẫn muốn
Điều này có nên được thực hiện bằng cách sử dụng bộ điều khiển chế độ xem và init với tên nib không? Tôi có nên đặt nib trong một số phương thức khởi tạo UIView trong mã không? Hay những gì tôi đã làm có ổn không?
initWithDataSource
sao? Dù sao điều này sẽ hoạt động ngay cả khi bạn đặt chủ sở hữu là 'Nil'.