Tôi đang thiết kế một ứng dụng Quiz đơn giản. Ứng dụng cần hiển thị các loại QuizQuestions khác nhau. Mỗi loại QuizQuestion có một hành vi và giao diện người dùng riêng biệt.Thiết kế iPhone subview (UIView vs UIViewController)
Giao diện người dùng sẽ được một cái gì đó như thế này: alt text http://dl.getdropbox.com/u/907284/Picture%201.png
Tôi muốn để có thể thiết kế từng loại QuizQuestion trong Interface Builder.
Ví dụ, một MultipleChoiceQuizQuestion sẽ trông như thế này: alt text http://dl.getdropbox.com/u/907284/Picture%202.png
Ban đầu, tôi lên kế hoạch để làm cho lớp QuizQuestion một UIViewController. Tuy nhiên, tôi đọc trong tài liệu của Apple rằng UIViewControllers chỉ nên được sử dụng để hiển thị toàn bộ trang.
Vì vậy, tôi đã thực hiện QuizController (quản lý toàn bộ màn hình, ví dụ: nút prev/next) UIViewController và lớp QuizQuestion của tôi là lớp con của UIView.
Tuy nhiên, để tải UIView này (tạo ra trong IB), tôi phải [1] làm như sau trong constructor của tôi:
//MultipleQuizQuestion.m
+(id)createInstance {
UIViewController *useless = [[UIViewController alloc] initWithNibName:@"MultipleQuizQuestion" bundle:nil];
UIView *view = [[useless.view retain] autorelease];
[useless release];
return view; // probably has a memory leak or something
}
Đây là loại truy cập dường như không có tiêu chuẩn hoặc hướng đối tượng. Loại mã này có bình thường/được chấp nhận không? Hay tôi đã chọn một người nghèo ở đâu đó trong thiết kế của tôi?
Thankyou,
chỉnh sửa (cho rõ ràng): Tôi muốn có một lớp riêng biệt để kiểm soát multipleChoiceView ... như một ViewController nhưng dường như đó là chỉ cho toàn bộ cửa sổ. Có lẽ tôi nên tạo một MultipleChoiceViewManager (không phải bộ điều khiển!) Và thiết lập chủ sở hữu của tập tin để thay thế?
Cảm ơn nhưng tôi muốn có một lớp riêng biệt để kiểm soát multipleChoiceView ... giống như một ViewController nhưng dường như chỉ dành cho toàn bộ cửa sổ. Có lẽ tôi nên tạo một MultiChoiceViewManager (không phải bộ điều khiển!) Và đặt Chủ sở hữu của tệp thành thay thế đó? – tba
Tôi nghĩ rằng bạn đang làm cho nó khó khăn hơn vào chính mình làm theo cách đó. Ủy quyền là những gì bạn phải sử dụng bất kể quyết định của bạn là về nơi bạn muốn mã của bạn - trong lớp riêng của nó hoặc trong lớp trình điều khiển chế độ xem nơi nó sẽ được sử dụng. Nó rõ ràng là tùy thuộc vào bạn, nhưng tôi không nghĩ bạn đang đạt được bất cứ điều gì bằng cách đặt nó trong lớp riêng của nó. Trân trọng. –