2009-12-02 38 views

Trả lời

4

Không, không có API nào cho phép bạn kiểm soát bố cục của các phân đoạn.

Có thể bạn có thể thử nhìn vào chế độ xem của UISegmentedControl và cố gắng thay đổi chúng theo nhu cầu của bạn. Nhưng từ kinh nghiệm cá nhân tôi sẽ không khuyên điều đó. Nếu Apple thay đổi thứ tự của họ trong tương lai, ứng dụng của bạn có thể sẽ bị lỗi. Điều dễ nhất cần làm là tạo UIButtons tùy chỉnh hoạt động như các nút chuyển đổi và kiểm soát chúng như một UISegmentedControls (đối với các nút chuyển đổi, xem How to use a UIButton as a toggle switch).

1

Nếu bạn muốn có giao diện khác, bạn chỉ có thể phân lớp và vẽ bản vẽ của riêng mình trong -drawRect:. Xem Quartz 2D Programming Guide để tham khảo khi vẽ bằng Đồ họa Thạch anh/Lõi.

20

Có điều gì đó thực sự dễ dàng mà bạn có thể làm gì để thoát khỏi thân mình của rác tròn trên UISegmentedControl ... thay đổi phong cách để "7". Mình không giỡn đâu. Tôi chỉ tìm ra này:

// Magic number ... (it's cheating, but it works) 
    mySegmentedBar.segmentedControlStyle = 7; 

Đây là cùng một phong cách kiểm soát họ sử dụng trong thanh phạm vi của UISearchBar, như thế này:

Search Bar With Scope

Nhưng nếu ai đó chỉ muốn thanh phạm vi, nếu không có sự tìm kiếm, chúng thường bị mắc kẹt với UISegmentedControl rác như thế này (với góc tròn):

BarStyle

Hoặc tệ hơn, điều này ...

BezeledStyle

Rất may, bằng cách chuyển sang bar phong cách "7", chúng tôi nhận được cái nhìn chính xác của thanh dừng lại, không có tất cả các subclassing và drawRect hackery:

enter image description here

+1

Nó giống như ma thuật. – Joel

+4

Đây có phải là API riêng tư không? – jjxtra

+0

@GregCombs nó được một lúc, muốn một câu trả lời về điều này^xin vui lòng, bất cứ khi nào bạn có thời gian – GangstaGraham

0

Sau rất nhiều cố gắng tôi dưới đây giải pháp mà làm việc tốt mà không có bất kỳ hình ảnh nền hoặc subclassing:

mySegmentedControl.tintColor = [UIColor clearColor]; //Clear all border 

    //Draw your own border 
    mySegmentedControl.layer.borderColor = [UIColor blackColor].CGColor; 
    mySegmentedControl.layer.borderWidth = 1.0; 

    //Set tint color for selected subview 
    UIColor *tintcolor=[UIColor redColor]; 
    int subViewIndex = 0; //index which is selected 
    [[_segmentControl.subviews objectAtIndex:subViewIndex] setTintColor:tintcolor]; 
1

Bằng cách thêm đường viền có chiều rộng hợp lý, bạn có thể lấy diện mạo bình phương:

self.segmentedControl.tintColor = [UIColor brownColor]; 
self.segmentedControl.layer.cornerRadius = 0.0; 
self.segmentedControl.layer.borderColor = [UIColor brownColor].CGColor; 
self.segmentedControl.layer.backgroundColor = [UIColor colorWithWhite:1 alpha:0.75].CGColor; 
self.segmentedControl.layer.borderWidth = 1.5f; 
self.segmentedControl.layer.masksToBounds = YES;