2010-06-21 32 views
9

Tôi có đoạn code sau để tạo ra một cái nhìn và đặt nó trong scrollview để cho phép phân trang
mã hoạt động tốt tuy nhiên những gì tôi không thể làm được đang tải quan điểm từ một tập tin nibCách tạo chế độ xem từ tệp nib trong xcode?

nói cách khác Tôi muốn sử dụng "initWithNibName" thay vì "initWithFrame"?

- (void)createPageWithColor:(UIColor *)color forPage:(int)page 
    { 
    UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 300,400)]; 
     newView.backgroundColor = color; 
    [scrollView addSubview:newView]; 
    } 

Thanks a lot

+0

Nếu bạn đã làm theo cách này (và, không, nhưng nếu bạn đã), bạn muốn để nhớ ' [phát hành newView] 'sau khi thêm nó vào' scrollView'. ScrollView của bạn sẽ giữ lại khung nhìn khi nó được thêm vào, vì vậy nó không thực sự thuộc về bạn nữa. –

Trả lời

14

Tôi nghĩ rằng điều bạn đang thiếu là bạn có thể đặt khung của UIView mới sau khi tải ngòi bút. Tải/Init thời gian không phải là shot duy nhất của bạn lúc đó. Tôi cũng phá vỡ chức năng tải thành các phần của nó, trong đoạn mã dưới đây, vì vậy bạn có thể thấy dễ dàng hơn những gì đang xảy ra.

Quan sát:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"yournib" 
                owner:self 
                options:nil]; 
//I'm assuming here that your nib's top level contains only the view 
//you want, so it's the only item in the array. 
UIView *myView = [nibContents objectAtIndex:0]; 
myView.frame = CGRectMake(0,0,300,400); //or whatever coordinates you need 
[scrollview addSubview:myView]; 

Đừng quên rằng cho UIScrollView rằng để thực sự di chuyển, bạn cần phải thiết lập thuộc tính contentSize của nó với kích thước của hàng hóa bên trong nó, đó là khả năng lớn hơn tài sản .frame của chính chế độ xem cuộn.

+0

Thats những gì tôi đang nói về :) Cảm ơn bạn Dan, giải pháp của bạn hoạt động hoàn hảo, có tôi đã thay đổi vị trí của các quan điểm trên scrollview với một cái gì đó như "scrollView.frame.size.width * page "cho x điều phối viên Cảm ơn một lần nữa, bạn đã làm cho ngày của tôi :) – ahmed

3

Hãy thử một cái gì đó như thế này (chuyển thể từ "iPhone Developers Cookbook", pg 174.):

UIView *newView = [[[NSBundle mainBundle] loadNibNamed:@"yournib" owner:self options:nil] lastObject]; 

này giả định một đối tượng xem duy nhất trong .xib của bạn, nhưng bạn có thể sửa đổi nó nếu .xib của bạn phức tạp hơn.

+0

Great John, nhưng tôi cần phải xác định vị trí của newView vì tôi đang thêm nó vào một scrollview – ahmed

+0

Nhận xét về một cái gì đó @ John N bỏ lỡ nhưng tôi đã bỏ lỡ rằng anh ấy đã bỏ lỡ nó. Đừng để ý! –

20

Tôi biết đây là một bài đăng cũ, nhưng tôi muốn tạo UIView dưới dạng tệp riêng biệt và thêm xib để tôi có thể sử dụng nó ở một số nơi trong ứng dụng của mình (gần giống như sử dụng nó làm ô xem bảng tùy chỉnh) . Và tôi không thể hoàn toàn đúng, nhưng bài đăng này đã giúp tôi đạt được kết quả mà tôi muốn.

Vì vậy, chỉ nếu có ai muốn làm điều đó theo cùng một cách, đây là những gì tôi đã làm:

Thêm phần này vào các mã khởi tạo trong file .m UIView của bạn:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil][0]; 
    if (self) 
    { 
     self.frame = frame; 
    } 
    return self; 
} 

Sau đó, trong xây dựng giao diện/xib editor bạn phải gán lớp bạn đã tạo cho UIView để bạn có thể thêm IBOutlets.

Hy vọng nó sẽ giúp ai đó ra ngoài, vì nó đã cho tôi một chút!

+0

Cảm ơn @ Mc W. – Meet

+2

Không cần phải thực hiện một CGRect mới, bạn chỉ có thể làm' self.frame = frame' –

+0

Fantastic! – bbrame

-1

Bạn có thể sử dụng lớp đơn giản https://github.com/ulian-onua/KRNNib để tạo chế độ xem từ tệp nib bằng một cuộc gọi phương thức.
Ví dụ, bạn có thể sử dụng KRNNib một cách tiếp theo:

UIView *view = [KRNNib viewFromNibWithName:@"TestView"]; 
[self.view addSubview:view]; // add instantiated view as subview to view of current UIViewController 
Các vấn đề liên quan