2010-08-16 25 views

Trả lời

20

+1 cho câu trả lời của Ben, mặc dù xoay điều khiển phân đoạn cũng xoay văn bản bên trong. Không bao giờ sợ! Chúng tôi chỉ phải xoay nhãn bên trong, như vậy:

NSArray *arr = [segmentedControl subviews]; 
    for (int i = 0; i < [arr count]; i++) { 
    UIView *v = (UIView*) [arr objectAtIndex:i]; 
    NSArray *subarr = [v subviews]; 
     for (int j = 0; j < [subarr count]; j++) { 
      if ([[subarr objectAtIndex:j] isKindOfClass:[UILabel class]]) { 
       UILabel *l = (UILabel*) [subarr objectAtIndex:j]; 
       l.transform = CGAffineTransformMakeRotation(- M_PI/2.0); //do the reverse of what Ben did 
      } 
     } 
    } 

Swift 2 phiên bản:

for view in segmentedControl.subviews { 
    for subview in view.subviews { 
     if subview.isKindOfClass(UILabel) { 
      subview.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI/2.0)) 
     } 
    } 
} 
+1

Điều này hoạt động tốt cho các nhãn, nhưng nếu điều khiển của bạn có hình ảnh thay thế, nó không hoạt động. Trong trường hợp đó, tôi sẽ làm theo đề nghị của Ben, và sau đó chỉ cần xoay các hình ảnh trong công cụ xem trước OSX (hoặc Photoshop) thay vì cố gắng xoay UIImageView trong mã của bạn. –

+1

Mã này dựa vào việc triển khai nội bộ (không có giấy tờ) của UISegmentedControl. Nó là dễ bị thất bại bất cứ khi nào Apple thay đổi việc thực hiện kiểm soát này. Ngay cả một thay đổi đơn giản như việc chèn thêm một lớp khung nhìn giữa các cá thể UILabel mà bạn đang tìm kiếm và cấp cao nhất sẽ phá vỡ mã này. – Arda

+0

@Arda Nó có thể bị hỏng, nhưng nó sẽ mất khoảng 10 phút để phát minh ra bộ điều khiển phân đoạn của riêng bạn đã làm điều tương tự nếu đó là trường hợp, do đó, làm điều đó và tận hưởng nó. Nhiều hơn khả năng, bạn sẽ luôn luôn có thể tìm thấy một cách để làm điều này nếu một cái gì đó được thay đổi dù sao đi nữa. – Sethmr

4

Điều khiển này chỉ nằm ngang. Từ các tài liệu UISegementedControl:

Một UISegmentedControl đối tượng là một kiểm soát ngang được tạo bởi nhiều phân đoạn, mỗi đoạn có chức năng như một nút rời rạc. Điều khiển phân đoạn dành cho một phương tiện nhỏ gọn để nhóm cùng với một số điều khiển.

Bạn sẽ phải thực hiện điều này dưới dạng điều khiển tùy chỉnh.

22

Bạn luôn có thể sửa đổi biến đổi trên điều khiển được phân đoạn.

segmentedControl.transform = CGAffineTransformMakeRotation (M_PI/2.0);

+0

+1 để trả lời câu hỏi :). Tôi tự hỏi về khả năng sử dụng của một điều khiển xoay phân đoạn. – RedBlueThing

+0

Vâng, tôi đã không đi qua phán quyết về việc đó là một ý tưởng tốt hay không ;-) –

+0

@ ben-gottlieb Một chất lượng đáng ngưỡng mộ :) – RedBlueThing

0

Tôi tìm thấy điều khiển dưới đây trong điều khiển cacao mà có vẻ tốt đẹp. Nó là một điều khiển tùy chỉnh và trông giống như một lớp con của UIControl.

smverticalsegmentedcontrol

Nhưng nếu bạn hỏi tôi, tôi có thể thử một cách tiếp cận khác nhau, tôi sẽ tạo ra một tabelview có chiều rộng cột (44px) và giữ nó như một đứa trẻ trong các thùng chứa và có thể sắp xếp nó vào một góc của vùng chứa, tùy chỉnh các ô và có danh sách của tôi trên đó và nhấn vào mỗi hàng, tải nội dung tương ứng trong chế độ xem chi tiết trong nội dung xem của bạn. Không thử nó, sẽ cố gắng và gửi kết quả sớm.

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