Khi phân lớp UIView
, tôi thường đặt tất cả mã khởi tạo và bố cục của mình theo phương thức init
. Nhưng tôi đã nói rằng mã bố cục nên được thực hiện bằng cách ghi đè layoutSuviews
. Có một số post trên SO giải thích khi mỗi phương thức được gọi, nhưng tôi muốn biết cách sử dụng chúng trong thực tế.UIView: layoutSubviews vs initWithFrame
Tôi hiện đặt tất cả các mã của tôi trong phương pháp init
, như thế này:
MyLongView.m
- (id)initWithHorizontalPlates:(int)theNumberOfPlates
{
self = [super initWithFrame:CGRectMake(0, 0, 768, 1024)];
if (self) {
// Initialization code
_numberOfPlates = theNumberOfPlates;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.frame];
[scrollView setContentSize:CGSizeMake(self.bounds.size.width* _numberOfPlates, self.bounds.size.height)];
[self addSubview:scrollView];
for(int i = 0; i < _numberOfPlates; i++){
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"a1greatnorth_normal_%d.jpg", i+1]];
UIImageView *plateImage = [[UIImageView alloc] initWithImage:img];
[scrollView addSubview:plateImage];
plateImage.center = CGPointMake((plateImage.bounds.size.width/2) + plateImage.bounds.size.width*i, plateImage.bounds.size.height/2);
}
}
return self;
}
Đó là nhiệm vụ thường lệ: thiết lập khung của xem, initialising một Ivar, thiết lập lên một scrollview, khởi tạo UIImages, đặt chúng trong UIImageViews, đặt chúng ra.
Câu hỏi của tôi là: điều nào trong số này nên được thực hiện trong init
và điều nào trong số này nên được thực hiện trong layoutSubviews
?
Tôi sẽ đẩy nó xuống dưới. Tạo các đối tượng subview của bạn trong 'viewDidLoad' thay vì init. lượt xem được tải một cách lười biếng và không có lý do gì để tạo các bản xem phụ nếu người giám sát không được tạo ra. – Abizern
Chúng ta đang nói về quan điểm ở đây, không phải ViewController. – calimarkus