2012-03-29 19 views
5
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 120)]; 
    [view addSubview:headViewController.vew]; 
    [self.view addSubview:view]; 
} 

HeadViewController.h:UIView addSubview và subview không được hiển thị

@interface HeadViewController : UIViewController 
{ 
    IBOutlet UIView *view; 
} 
@property (nonatomic, retain)IBOutlet UIView *view; 
@end 

và tôi kết nối quan điểm cho chủ sở hữu của tập tin.

Và tôi không thể thấy số headViewController.view.

Trả lời

15

Trước hết, bạn không cần phải xác định đầu ra view trong lớp HeadViewController. Nó được tự động kế thừa từ lớp siêu hạng UIViewController.

Sau đó, tôi khuyên bạn nên thêm trực tiếp chế độ xem của HeadViewController vào chế độ xem hiện tại của bạn. Ví dụ.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    headViewController.view.frame = CGRectMake(0, 0, 320, 120); 
    [self.view addSubview:headViewController.view]; 
} 

Tuy nhiên, nếu bạn đang sử dụng ARC (tự động đếm tham chiếu), các trường hợp headViewController có thể sẽ được deallocated sau khi kết thúc của phương pháp viewDidLoad. Nó là thuận tiện (và tôi muốn nói nó là bắt buộc) để gán ví dụ đó cho một biến cục bộ trong bộ điều khiển mà bạn hiện đang hiển thị. Bằng cách này, bạn sẽ có thể xử lý các thành phần của khung nhìn của nó sau này nếu cần thiết, cá thể sẽ được giữ lại và mọi thứ khác sẽ hoạt động hoàn hảo. Bạn nên có cái gì đó như:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    headViewController.view.frame = CGRectMake(0, 0, 320, 120); 
    [self.view addSubview:headViewController.view]; 
} 

@interface MyController() 
    @property (nonatomic, strong) HeadViewController *headViewController; 
@end 

trong định nghĩa giao diện ẩn vào lúc bắt đầu của tập tin thực hiện .m lớp.

+0

Tôi sửa bạn: headViewController.view là không, nếu nó không được thêm dưới dạng subview. cần hoán đổi phần thêm và xem khung – NeverBe

+0

Kiểm tra cập nhật của tôi về ARC. Nếu 'headViewController.view' là' nil', hãy kiểm tra lại kết nối của khung nhìn với bộ điều khiển trong tệp nib. Có phải 'nil' nằm bên trong phương thức này (vấn đề đầu ra) hay sau khi nó kết thúc (vấn đề ARC)? – marzapower

+0

Tôi đã thay đổi mã, giống như bạn đã nói với tôi và tôi xác định chế độ xem vì tôi xóa chế độ xem mặc định. Và vẫn không có headViewController.view ... tôi đang bối rối. – jxdwinter

0

Nó trông giống như một typo - quên tôi trong .view

[xem addSubview: headViewController.vew];

+1

Điều đó có thể đúng, nhưng có vẻ như op đã giải quyết vấn đề này một thời gian dài trước đây ... – greedybuddha

0

tôi bị thiếu trong cú pháp

[xem addSubview: headViewController.view];

+0

Câu trả lời đã được cung cấp 2 năm trước. Mục đích bây giờ là gì? – YoungHobbit

+0

tôi vừa thấy cái này – Bharath

Các vấn đề liên quan