2012-06-13 31 views
10

Tôi thường tạo các chế độ xem tùy chỉnh theo cách lập trình và để chúng được khởi tạo theo chương trình cũng như các phương thức init tùy chỉnh (ví dụ: initWithFrame: SomeParam: OtherParam). Có thể sử dụng các chế độ xem tùy chỉnh đó kết hợp với tệp xib không? Tức là, có một tệp xib cha mẹ có nhiều chế độ xem tùy chỉnh khác nhau dưới dạng các bản xem phụ trong đó các bản xem trước này có thể cần sử dụng một phương thức init khác?Chế độ xem tùy chỉnh iOS trong các tệp xib

Trả lời

10

Nếu bạn thêm quan điểm tùy chỉnh thành một file xib, bạn có thể không sử dụng một initializer tùy chỉnh. Tất cả chúng sẽ được khởi tạo bằng cách sử dụng initWithCoder.

Thông thường bạn sẽ thực hiện bất kỳ thiết lập nào theo phương thức chung được gọi từ đó hoặc trong awakeFromNib.

Nếu bạn cần đặt bất kỳ thuộc tính tùy chỉnh nào trên chế độ xem có nguồn gốc từ bên ngoài, hãy thực hiện trong viewDidLoad bộ điều khiển chế độ xem của bạn.

+0

Nếu tôi cần làm sth trước khi viewDidLoad của trình điều khiển chế độ xem của tôi, cách thực hiện nó? Ví dụ ... Chế độ xem của tôi được sử dụng để hiển thị một trang của một cuốn sách.Không có phương thức init tùy chỉnh, chẳng hạn như trang initWithPage: đồng thời tôi cũng sử dụng bảng phân cảnh. – Carina

+1

Trước khi viewDidLoad, chế độ xem của bạn không tồn tại. Chỉ cần di chuyển thiết lập bạn thực hiện trong initWith ... sang một phương thức khác và thực hiện bất kỳ thay đổi nào bạn cần ở đó, sau khi bạn đặt thuộc tính. – jrturton

3

tất nhiên là có thể. kéo uiview vào xib không nằm trong khung nhìn mặc định. sau đó tạo IBOutlet UIView *myCustomView; và sau đó kết nối với chế độ xem khác. khi u muốn thể hiện quan điểm này thêm này như [self.view addSubview:myCustomView]; khi muốn loại bỏ nó

[myCustomView removeFromSuperView];

enter image description here

+0

Vậy ... hàm initWithSomeValue: value như thế nào? – Carina

+0

Điều này sẽ không hoạt động nếu bạn muốn chia sẻ nói chế độ xem tiêu đề tùy chỉnh trên nhiều tệp XIB ... Bạn sẽ phải xác định lại chính xác từng xib – LightningStryk

6

Nhận xib của chế độ xem được khởi tạo theo cách thông thường và sử dụng tham chiếu thực hiện cài đặt tùy chỉnh. phần này có thể được đặt trong phương thức init như this-

 -(void)initfunction{ 
     UIView *containerView = [[[NSBundle mainBundle] loadNibNamed:@"myView" owner:self options:nil] lastObject]; 
     containerView.property1 = xyz;//Customization 
     containerView.property2= abc;//Customization 
     containerView.frame = CGRectMake(x,y,z,p);//Customization 
     [rootView addSubview:containerView]; 


    } 

điểm là khi chúng ta sử dụng một xib chúng ta không khởi tạo một cách rõ ràng, các xib chức năng tiện ích trả về một đối tượng khởi tạo (của UIView), sau khi người ta có UIView đối tượng, người đó có thể sử dụng đối tượng được khởi tạo như một đối tượng thông thường để thực hiện các thay đổi tùy chỉnh khác.

0

Lớp UINib (iOS) và NSNib (OS X) cung cấp hiệu suất tốt hơn trong các trường hợp bạn muốn tạo nhiều bản sao nội dung của một tệp nib. Quá trình tải nib bình thường liên quan đến việc đọc tệp nib từ đĩa và sau đó instantiating các đối tượng nó chứa. Tuy nhiên, với các lớp UINib và NSNib, tệp nib được đọc từ đĩa một lần và nội dung được lưu trữ trong bộ nhớ. Bởi vì chúng nằm trong bộ nhớ, việc tạo các bộ đối tượng liên tiếp tốn ít thời gian hơn vì nó không yêu cầu truy cập đĩa.

  1. Tạo một tài khoản xem tập tin xib: Nhấp chuột phải vào dự án -> New File -> User Interface -> View (ví dụ như bạn sẽ có "MyView.xib")
  2. Điền quan điểm sử dụng giao diện Builder
  3. Thêm phương pháp tiếp theo để bạn thành phần cha mẹ

    static UINib *nib = nil; 
    
    - (UIView*)createNewViewFromNib: (NSString *)nibFileName 
    { 
        if(nib == nil) { 
         nib = [UINib nibWithNibName:nibFileName bundle:nil ]; 
        } 
    
        // Unarchiving objects from the nib. You can do it multiple times to create a number of objects from same nib. 
        NSArray* topLevelObjs = [nib instantiateWithOwner:self options:nil]; 
    
        if (topLevelObjs == nil) 
        { 
         NSLog(@"Warning! Could not load nib file.\n"); 
         return nil; 
        } 
        // We have only one view in the nib. 
        return [topLevelObjs objectAtIndex:0]; 
    } 
    
  4. Sử dụng dòng tiếp theo của mã để nhanh chóng bạn xem với đối tượng nib tái sử dụng:

    UIView *item = [self createNewViewFromNib:@"MyView"]; 
    // [self.view addSubview:item]; 
    
Các vấn đề liên quan