2013-07-10 69 views
5

Tôi hơi mới đối với việc phát triển MVC và iOS và tôi dường như không thể hòa giải cách kiểu dáng giao diện người dùng phù hợp với mô hình này.Các đối tượng UI kiểu dáng trong iOS có vi phạm MVC không?

Chế độ xem MVC được tạo bằng bảng phân cảnh và tôi có thể áp dụng kiểu dáng nguyên thủy thông qua trình kiểm tra thuộc tính của Xcode, nhưng bất kỳ điều gì phức tạp hơn tôi đều phải sử dụng Controller để tạo kiểu. Ví dụ:

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; // required 

    // set background color of view 
    [[self view] setBackgroundColor:[UIColor darkGrayColor]]; 
} 

Điều này dường như vi phạm rõ ràng MVC vì tôi đang áp dụng logic kiểu bên trong mã của bộ điều khiển. Tôi thấy điều này tương tự khi viết một ứng dụng HTML và thay vì sử dụng các tờ định kiểu, tôi viết mã để áp dụng các kiểu cục bộ trong JavaScript. Đây có phải là điểm yếu của iOS hoặc tôi chỉ làm sai?

+0

Bạn có thể trộn và kết hợp cả hai trong mã của bạn. Nếu bạn muốn, bạn thậm chí có thể thao tác chi tiết mô hình trong Bộ điều khiển. MVC không được thi hành nghiêm ngặt theo các hướng dẫn chung của mẫu, nhưng nếu bạn muốn giữ đúng mô hình, bạn chỉ cần hạn chế sử dụng M hoặc V trong C. – ApolloSoftware

+1

Có thể cho rằng kiểu dáng là một dạng dữ liệu. Vì bộ điều khiển thường cung cấp chế độ xem với dữ liệu, có bộ điều khiển cung cấp chế độ xem có kiểu tương tự. – rmaddy

Trả lời

2

Taken từ Apple's docs:

một số đối tượng điều khiển cũng có thể cho một đối tượng nhằm thay đổi một khía cạnh sự xuất hiện hoặc hành vi của nó

Và nó làm cho cảm giác như xem là nghĩa vụ phải được thụ động và chỉ phản ánh trạng thái ứng dụng dưới dạng giao diện người dùng và bộ điều khiển sẽ "cho biết" chế độ xem nếu một số nội dung của nó cần được thay đổi theo hành động của người dùng. (ví dụ: thay đổi nền, khả năng hiển thị của các điều khiển vv ..)

+0

Nhưng trong trường hợp này, tôi chỉ tạo kiểu dáng cho các nút tĩnh, nhãn, v.v. Không có kết nối với phản hồi hành động của người dùng hoặc thay đổi trong mô hình. Tôi nghĩ rằng iOS có thể thiếu tương đương với CSS. – Erich

+1

Chế độ xem phải được tạo ở đâu đó vì chế độ xem không gọi tạo của riêng nó.Mặc dù Interface Builder ẩn hầu hết điều này khỏi bạn không có nghĩa là nó không tạo ra các khung nhìn theo cùng một cách – giorashc

0

Bạn có thể trộn và kết hợp cả hai trong mã của bạn. Nếu bạn muốn, bạn thậm chí có thể thao tác chi tiết mô hình trong Bộ điều khiển. MVC không được thi hành nghiêm ngặt theo các nguyên tắc chung của mẫu này, nhưng nếu bạn muốn giữ nguyên hình mẫu, bạn chỉ cần hạn chế sử dụng M hoặc V trong C.

Xem đòi hỏi mỹ phẩm và tính thẩm mỹ của các dạng cũng như kiểu dáng, nhưng dòng dưới cùng, bạn có thể thao tác các khía cạnh này từ bộ điều khiển ...

1

Trên thực tế màn hình là "chế độ xem" của bạn và "bộ điều khiển" của bạn đang gửi tin nhắn đến chế độ xem của bạn để sử dụng màu khác bối cảnh.

Nếu bạn có đối tượng dữ liệu giữ màu màn hình, đó có thể là "mô hình" của bạn. Trong trường hợp đó, bạn sẽ chuyển dữ liệu từ mô hình của bạn đến khung nhìn thông qua bộ điều khiển.

0

Như những người khác đã nói, nếu bạn hiểu màu sắc và kiểu dáng làm dữ liệu, bạn có thể để bộ điều khiển xử lý.

Nhưng bạn cũng có thể phân lớp UIviews và đặt nội bộ kiểu.

Giả sử bạn có TrafficLightView : UIView với thuộc tính id trafficLight. bạn có thể ghi đè lên setter và thiết lập màu nền của khung nhìn cho phù hợp với trạng thái của đối tượng. trafficLight.

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