2013-01-24 29 views
17

Tôi có UISegmentedControl với hai phân đoạn (chỉ mục: 0 và 1) mà tôi đang cố gắng đặt lại theo chương trình thành 0. Khi tôi chạy lệnh bên dưới, nó không đặt lại chỉ mục phân đoạn thành 0 kỳ vọng. Thay vào đó, nó làm nổi bật phân đoạn được lập chỉ mục 1.Thay đổi UISegmentedControl chỉ số hoặc giá trị được chọn theo lập trình

[seg setSelectedSegmentIndex:0]; 

Rất tiếc khi tôi đăng nhập đoạn đã chọn, nó trả về 0.

NSLog(@"seg setSelectedSegmentIndex %d", seg.selectedSegmentIndex); 

Cũng kỳ quặc, sau khi chạy setSelectedSegmentIndex:0 tôi không thể chọn lại phân khúc 0 bằng tay bằng cảm ứng, nó có vẻ là bị khóa để phân đoạn 1, cho đến khi tôi gõ 1, trong đó nó hoạt động như bình thường.

Đây là thiết lập cho nút:

itemArray = [NSMutableArray arrayWithObjects: @"Zero", @"One", nil]; 
    seg = [[UISegmentedControl alloc] initWithItems:itemArray]; 
    [seg setFrame:segRect]; 
    seg.segmentedControlStyle = UISegmentedControlStyleBar; 
    seg.momentary = NO; 
    [seg addTarget:self action:@selector(someAction:) forControlEvents: UIControlEventValueChanged]; 
    [mainView addSubview:seg]; 

LƯU Ý: Để xác định lại những gì tôi đã cố gắng để hoàn thành với câu hỏi này: Tôi muốn thiết lập chỉ số được lựa chọn của UISegmentedControl qua một biến động, có phản hồi trực quan thích hợp và kiểm tra chỉ mục đã chọn trong một phương thức, để thực hiện điều gì đó xảy ra tùy thuộc vào chỉ mục đã chọn. Xem câu trả lời của tôi dưới đây cho một giải pháp.

+0

đều các phân đoạn kích hoạt trước khi bạn cố gắng chọn? (sử dụng isEnabledForSegmentAtIndex) –

+0

@calvinBhai Tôi nghĩ vậy, sẽ không được kích hoạt mặc định? – Mrwolfy

+0

Tôi có cùng một vấn đề, phân khúc 0 không thể được chọn lại khi một trong số những người khác đã có. Tôi sẽ phát hành với một workaround của có một seg trống 0 cho bây giờ. Phân đoạn của tôi nằm bên trong UIControl bên trong UIScrollView. Tôi đã có vấn đề trước đây khi iOS 5 làm việc tốt, nhưng cùng một nhị phân trên iOS6 trưng bày vấn đề này. –

Trả lời

27

Thay đổi trong viewDidLoad:

[seg setSelectedSegmentIndex:index]; 

bạn thay đổi sử dụng các giá trị chỉ số như mong muốn của bạn.

+0

Có. Đó là những gì tôi đang làm. Cảm ơn. – Mrwolfy

1

Từ mã, bạn chỉ có thể thực hiện seg.selectedSegmentIndex = someDefaultIndex.

Cho dù bạn nên đặt nó trong viewDidLoad: hoặc không phụ thuộc hoàn toàn vào cấu trúc của ứng dụng của bạn. Ví dụ: nếu ứng dụng của bạn khởi động và tải chế độ xem lần đầu tiên và cần đặt điều khiển thành bất kỳ giá trị nào trong ứng dụng trước đó thì chắc chắn sẽ có ý nghĩa khi thực hiện ở đó.

1

Điều này giúp sắp xếp phân khúc đã chọn, về mặt feedbak trực quan, sau khi thiết lập một cách có lập trình đoạn đã chọn, điều này sẽ tô màu các phân đoạn một cách chính xác.

for (int i=0; i<[seg.subviews count]; i++) 
{ 

    if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && [[seg.subviews objectAtIndex:i]isSelected]) 
    { 
     [[seg.subviews objectAtIndex:i] setTintColor:[UIColor grayColor]]; 
    } 
    if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && ![[seg.subviews objectAtIndex:i] isSelected]) 
    { 
     [[seg.subviews objectAtIndex:i] setTintColor:[UIColor blackColor]]; 
    } 
} 
0

Để xác định lại những gì tôi đã cố gắng để hoàn thành với câu hỏi này: Tôi muốn thiết lập chỉ số được lựa chọn của UISegmentedControl qua một biến động, có ý kiến ​​phản hồi thị giác thích hợp, và kiểm tra chỉ số được lựa chọn trong một phương pháp, để làm một cái gì đó xảy ra tùy thuộc vào chỉ mục đã chọn.

Ban đầu tôi đoán rằng điều này đơn giản như: mySegmentedController.selectedSegmentIndex = someIndex, sau đó kiểm tra chỉ mục. Nhưng như đã nói trong câu hỏi của tôi, nó không hiệu quả với tôi. Các hành vi là lẻ. Sau khi chạy mã đó, nút thích hợp sẽ không làm nổi bật.

Đây là một dự án mà tôi đã sửa chữa nó, vì vậy nó hoạt động. Không chắc chắn chính xác lý do tại sao nó hoạt động. Có thể một sự chậm trễ tôi đặt trong đó, trước khi thiết lập chỉ mục. Tôi sẽ cập nhật và nhận xét tệp dự án nếu tôi có thể tinh chỉnh nó.

http://owolf.net/uploads/StackOverflow/SegmentedControllers.zip

0

Chú ý: Đây không phải là khá trả lời các câu hỏi, nhưng liên quan chặt chẽ.

Tôi gặp sự cố tương tự. Hầu hết thời gian UISegmentedController của tôi hoạt động tốt. Nó có 4 phân đoạn, Tắt, 30, 60 và 120.

Khoảng thời gian ngẫu nhiên (thường chỉ trước khi phát hành !!), đoạn Tắt sẽ không thể chọn được từ giao diện người dùng. (Tôi đã không thử chọn nó từ mã vì đó không phải là những gì tôi cần làm và sẽ không giải quyết được vấn đề của tôi.)

Giải pháp là xóa UISegmentedController khỏi XIB của tôi và thay thế bằng một cái mới (và chính xác giống hệt nhau) mà sau đó hoạt động tốt.

Tôi thậm chí CMD-C và CMD-V'd vi phạm UISegmentedController vào XIB của ứng dụng khác. Và phân đoạn Tắt (tức là đoạn tại chỉ số 0) cũng không thể chọn được trong XIB đó.

Điều này có vẻ là vấn đề với XCode.

0

Swift 3,0

segmentedControl.selectedSegmentIndex = #your value# 
Các vấn đề liên quan