2010-01-01 56 views
9

Câu hỏi của tôi xoay quanh sự phân biệt của UISegmentedController trên UINavigationBar và thanh công cụ UIToolbar. Nếu tôi thả UISegmentedControl vào thanh điều hướng như sau:Màu UISegmentedControl trong thanh công cụ UIToolbar

navigationBar.barStyle = UIBarStyleBlackTranslucent; 

tất cả đều tốt. UISegmentedControl xác định tùy chọn được chọn với màu đen hơi đậm hơn. Nhưng, nếu tôi thả một UISegmentedControl vào một UIToolbar, nó không nhận được màu sắc hoặc độ mờ từ thanh công cụ. Nếu tôi tự thiết lập tintColor, UISegmentedControl không phân biệt giữa lựa chọn và không được chọn nữa.

Phải thừa nhận rằng, người ta phải bọc UISegmentedControl trong UIBarButtonItem trước khi thả vào thanh UIToolbar. Tôi tự hỏi nếu đó là một phần của lý do UISegmentedControl trông không chính xác (màu xanh trên nền đen mờ).

toolbar.barStyle = UIBarStyleBlackTranslucent; 
UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:segmentedControl]; 
NSArray *toolbarItems = [[NSArray alloc] initWithObjects:item,nil]; 
toolbar.items = toolbarItems; 

Được cấp, mã của tôi không chính xác như được viết vì tôi đang sử dụng thanh điều hướng bên trong và thanh công cụ điều khiển nhưng logic chung là giống nhau. Tôi không chắc chắn làm thế nào để làm cho UISegmentedControl trên UIToolbar có một phong cách mờ đen - duy trì một sự phân biệt rõ ràng giữa các phân đoạn được chọn và không được chọn.

+0

này giúp: 'segmentedController.tintColor = [UIColor darkGrayColor];' nhưng nó tạo ra sự phụ thuộc khó mã hóa mà tôi không muốn giới thiệu. Ví dụ, làm cho nó hơi phức tạp hơn để cho phép người dùng lựa chọn các lược đồ màu. –

+0

Bạn đã tìm ra kết quả? – DenNukem

+0

Cho đến khi Apple triển khai logic màu UINavigation vào thanh công cụ UIToolbar cho UISegmentedControl, tôi đã bị xuống cấp để sử dụng thuộc tính tintColor. –

Trả lời

7

Có vẻ như: segmentedController.tintColor = [UIColor darkGrayColor]; giải quyết vấn đề của bạn.

Để xóa "phụ thuộc", phân lớp UISegmentedControl và đặt màu trong hàm tạo.

CustomSegmentedControl.m

- (id)initWithItems:(NSArray*)items { 
    if(self = [super initWithItems:items]) { 
     self.tintColor = [UIColor darkGrayColor]; 
    } 
    return self; 
} 
+0

Tôi nghĩ rằng bạn chỉ đang di chuyển sự phụ thuộc, không loại bỏ nó. Ví dụ, nếu tôi thay đổi màu của thanh công cụ thành "xanh lục" - tôi phải đi và tìm mọi dòng mã như thế này và thay đổi nó. Tôi không muốn thiết lập ứng dụng của mình như thế. Tôi muốn thanh được phân đoạn chuyển thành nguồn cấp dữ liệu "tự động" của phụ huynh đó. Thật vậy, nó thực hiện điều này tự động khi được đặt trong một UINavigationController. Nếu bạn thay đổi kiểu UNavigationBar thành màu đen mờ - mọi UISegmentedController con đều tự động theo sau bộ. –

+0

Thật không may, khi một UISegmentedControl được đặt bên trong một thanh công cụ UIToolbar, nó không tự động phản ánh tùy chọn kiểu/màu của thanh công cụ và, như bạn đã minh họa, tôi phải nói rõ nó là màu gì. Trong ví dụ này, tôi xác định rằng đó là "phụ thuộc" và tôi đang tìm một giải pháp không giới thiệu loại phụ thuộc đó. Tôi không muốn đặt màu ở nhiều nơi. –

+0

Vì đây là lớp con, màu chỉ xuất hiện một lần trong mã của bạn. Đây là một tính năng của thiết kế hướng đối tượng. Bạn có thể có 100 trường hợp CustomSegmentedControl trong ứng dụng của bạn, nhưng màu sắc chỉ được chỉ định một lần. – bentford

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