Tôi nghĩ rằng tôi đang thiếu một cái gì đó cơ bản và vì vậy tôi muốn hỏi cộng đồng để được giúp đỡ. Tôi đang xây dựng một ứng dụng dựa trên một Ứng dụng Tiện ích iPhone cơ bản. MainView của tôi và FlipsideView chia sẻ một số yếu tố vì vậy tôi đã tạo ra ViewControllers và nib tập tin riêng biệt cho những phần. Để làm điều này tôi đã làm như sau: 1. Tạo một bộ điều khiển xem được gọi là searchDateViewController là chủ sở hữu tệp của searchDateView.xib 2. searchDateView.xib về cơ bản là một UIView với một UILabel bên trong, khung nhìn được nối đúng một cách chính xác 3. Bên trong cả hai MainViewController.m và FlipsideViewController.m Tôi thêm một subview như folllows:superview và ParentViewController nil sau khi thêm một subview
- (void)loadView{
[super loadView];
searchDateViewController = [[SearchDateViewController alloc] initWithNibName:@"SearchDateView" bundle:nil];
[[searchDateViewController view] setFrame:[searchDateView frame]];
[[self view] addSubview:[searchDateViewController view]];
...
}
Mọi thứ đều hiển thị và hoạt động tốt. Về cơ bản tùy thuộc vào hành động xảy ra trong mỗi quan điểm chính và flipside UILabel của ngòi được thay đổi. Tuy nhiên, tôi muốn làm một cái gì đó hơi khác nhau nếu searchDateViewController được tải từ MainView hoặc FlipsideView. Tuy nhiên, tôi dường như không thể tìm ra ViewController nào đang thêm subview searchDateViewController.
Trong searchDateViewController tôi đã cố gắng:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"superview %@", self.view.superview);
NSLog(@"parentviewcontroller %@", self.parentViewController);
}
Trong cả hai trường hợp tôi nhận được nil.
Vì vậy, câu hỏi của tôi là - tôi có thể tìm hiểu xem ViewController nào đang thêm searchDateViewController vào một chế độ xem phụ không? Nếu thế thì sao? Hoặc nếu logic của tôi ở đây là hoàn toàn sai lầm, làm thế nào tôi nên làm điều này?
Cảm ơn!
Được rồi, cảm ơn vì đã chỉ cho tôi đúng hướng về các bản phụ và các lớp con UIViewController. Nếu tôi làm cho SearchDateViewController một phân lớp của NSObject như thế nào mà sẽ ảnh hưởng đến cách tôi thêm các subviews và initing với nib? Tôi đã không tìm thấy bất kỳ ví dụ của subviews như nsobjects hơn là viewcontrollers nhưng tôi muốn bắt đầu áp dụng bất kỳ thực hành tiêu chuẩn là trong trường hợp này. Hãy cho tôi biết nếu bạn có thêm bất kỳ mẹo nào - cảm ơn! Ngoài ra - cả hai bạn đều đề xuất sử dụng bảng điều khiển cha mẹ, điều này có ý nghĩa, nhưng vai trò của superview sẽ phát? Điều đó có phù hợp hơn ở đây không? – deadroxy
Làm cho SearchDateViewController một phân lớp của NSObject không loại bỏ vấn đề của bạn, nó chỉ tránh được các vấn đề trong tương lai vì UIViewControllers không thực sự được sử dụng cho các khung nhìn không chiếm toàn bộ cửa sổ IMHO. Để giải quyết vấn đề của bạn, mã tùy chỉnh chế độ xem của bạn không nên dựa vào self.parentViewController hoặc view.superview. Thay vào đó, hãy định nghĩa một thuộc tính trong SearchDateViewController (có thể là một BOOL hoặc một enum) mà bạn sau đó truy vấn để quyết định cách tùy chỉnh khung nhìn. Đối tượng tạo SearchDateViewController sẽ thiết lập thuộc tính. –
Tôi đã làm như bạn đã nói tạo ra một tài sản trong lớp SearchDateViewController mà làm việc tốt. Tuy nhiên, tôi vẫn còn bối rối như thế nào để chuyển đổi từ đó được subclassed từ UIViewController để UIView/NSObject. Cụ thể ai sẽ trở thành chủ sở hữu của tệp SearchDateView? Tôi đã thử mọi cách và mọi thứ tôi đã thực hiện dẫn đến lỗi ... – deadroxy