2012-06-25 41 views
5

Tôi đang đặt giao diện điều khiển được phân đoạn qua các câu lệnh này trong ủy nhiệm ứng dụng.Hành vi lạ với UISegmentedControl và UIAppearance

[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_normal.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] 
     forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 

    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalNormal.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalSelected.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_SelectedNormal.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

Kết quả là tốt. Nền và ngăn được đặt chính xác khi tôi chọn bất kỳ phân đoạn nào (phân đoạn Đơn hàng được chọn theo Mặc định khi ứng dụng lần đầu tiên khởi chạy). Khi tôi chọn phân đoạn Phát hành như bạn có thể thấy bên dưới, mọi thứ đều ổn.

enter image description here

Vấn đề là khi tôi đi ra khỏi quan điểm sau đó quay trở lại xem (tôi lưu trữ các chỉ số được lựa chọn và đặt nó trong viewDidLoad để chọn lại phân khúc), chia được đặt không đúng đối với một số chưa biết lý do.

enter image description here

Nếu tôi gõ vào A-Z rồi Phát hành, nó sửa chữa chính nó. Lỗi này chỉ xảy ra khi lượt xem đầu tiên tải và phân đoạn đã chọn là Bản phát hành hoặc A-Z. Bộ chia luôn luôn ổn khi Order được chọn và khung nhìn tải.

Kích thước hình ảnh: dải phân cách rộng 2px (tất cả 3 hình có cùng kích thước), hình nền rộng 2 px.

Bất kỳ ý tưởng hoặc con trỏ nào sẽ được đánh giá cao, tôi đã kéo tóc của tôi trong 10 giờ qua cố gắng tìm một giải pháp không có sẵn.

+0

Gọi phương thức 'setNeedsDisplay' của' UISegmentedControl' sau khi bạn đặt chỉ mục đã chọn của 'UISegmentedControl' trong' viewDidLoad'. Có lẽ điều đó sẽ khắc phục được vấn đề. –

+0

Không hoạt động. Cảm ơn mặc dù! –

+0

Tôi cũng gặp sự cố này. Damn: ( – runmad

Trả lời

7

Đây là lỗi với UISegmentedControl, tôi nghĩ vậy. Bạn có thể làm việc xung quanh nó bằng cách thiết lập các phân đoạn được chọn sau một sự chậm trễ, để cho phép thời gian kiểm soát để vẽ chính nó. Bạn thậm chí không phải sử dụng độ trễ thực tế, chỉ cần một cái gì đó như:

[self performSelector:@selector(setPreferences) withObject:nil afterDelay:0.0]; 

Cập nhật giá trị của điều khiển phân đoạn của bạn.

+0

nó hoạt động rất tốt. Nhưng tôi tự hỏi điều gì có thể là lý do thực sự đằng sau điều này? – thesummersign

+1

vì nó sẽ được thực hiện sau vòng chạy đầu tiên (kiểm soát phân đoạn đã được rút ra) lỗi này được biết là lỗi và cố định trong iOS 6 –

+0

tôi có thể xác nhận điều này hoạt động .. cảm ơn rất nhiều – glasz