2013-05-03 26 views
6

Tôi có UICollectionView trong đó mỗi UICollectionViewCell có UIButton dưới dạng chế độ xem phụ. Các UIButtons đáp ứng với vòi không có vấn đề (mục tiêu của họ bị sa thải), nhưng nút chính nó không thay đổi trạng thái được lựa chọn (không có thay đổi trong giao diện của nút). Tôi có linh cảm vì UICollectionViewCell không chuyển tiếp các sự kiện liên lạc của mình một cách chính xác đến nút, nhưng tôi không chắc chắn. Ngay cả khi đó là như vậy, làm thế nào để tôi thiết lập mọi thứ để trạng thái của nút thay đổi đúng trong kịch bản này?UIButton subview trong UICollectionViewCell không thay đổi trạng thái điều khiển

Trả lời

12

Các UIScrollview (và do đó UICollectionView quá) có một tính chất gọi delaysContentTouches, theo mặc định nó được thiết lập để YES, thay đổi này để NO và nút của bạn sẽ nổi bật như nó là vụ phải.

+0

Đẹp! Làm việc hoàn hảo.Đối với những người tò mò, đây là tài liệu liên quan về thuộc tính đó: 'Một giá trị Boolean xác định xem chế độ xem cuộn có làm trì hoãn việc xử lý các cử chỉ cảm ứng không. Nếu giá trị của thuộc tính này là CÓ, chế độ xem cuộn sẽ xử lý thao tác chạm xuống cho đến khi nó có thể xác định xem cuộn có là ý định hay không. Nếu giá trị là NO, chế độ xem cuộn ngay lập tức gọi chạm vàoShouldBegin: withEvent: inContentView :. Giá trị mặc định là YES.' –

0

Nếu tôi có thể đề nghị một sự thay thế, các UICollectionView có một phương pháp đại biểu tuyệt vời gọi là

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { } 

mà có thể xử lý các nhấp chuột để di động đó ... nếu bạn đang tìm kiếm cho các sự kiện cụ thể xảy ra như nhìn thấy một hình ảnh thay đổi trạng thái của nút, bạn có thể mã cứng trong ... khi họ nhấn nút làm một việc, khi họ nhả nút làm một việc khác ....

theo tài liệu cũng như

UIControlStateSe lected Trạng thái kiểm soát được chọn. Đối với nhiều điều khiển, trạng thái này không ảnh hưởng đến hành vi hoặc ngoại hình. Nhưng các lớp con khác (ví dụ, lớp UISegmentedControl) có thể có sự xuất hiện khác nhau tùy thuộc vào trạng thái được chọn của chúng. Bạn có thể truy xuất và đặt giá trị này thông qua thuộc tính đã chọn.

về laymens .. cho một UIButton các "Nhà nước được chọn" không có gì ...

nếu nút là giả sử để mờ khi được nhấp vào và nó không làm điều đó, sau đó bạn có thể phải làm điều đó lập trình nếu, nhưng tôi không chắc chắn chính xác những gì bạn đang cố gắng làm ...

tính năng mờ là với ở bang nhấn mạnh

UIControlStateHighlighted Nổi bật trạng thái của một điều khiển. Một điều khiển đi vào trạng thái này khi một lần chạm vào và thoát trong khi theo dõi và khi có sự kiện liên lạc. Bạn có thể truy xuất và đặt giá trị này thông qua thuộc tính được đánh dấu.

về laymens, bạn chạm vào nút nó nhấn mạnh

để xem nếu nút được thay đổi trạng thái đúng cách bạn có thể làm một cái gì đó như thế này

[button addTarget:self action:@selector(functionToCall:) forControlEvents:UIControlEventAllTouchEvents]; 

NSLog(@"Selected: %i", button.selected); 
NSLog(@"Highlighted: %i", button.highlighted); 
NSLog(@"Normal State or not: %i", button.state); 

các "functionToCall sẽ được gọi khi bất kỳ loại liên lạc thậm chí sẽ xảy ra với nút và với chức năng đó, bạn có thể có 3 NSLogs này sẽ in ra bảng điều khiển của bạn các giá trị UIControlState khác nhau, điều này sẽ cho thấy nút hoạt động đúng và cho thấy rằng đó có thể là lỗi UIViewCollection, nếu đó là UICollectionView ... thì bạn sẽ phải lập trình làm mờ nút: 3

hy vọng điều này sẽ hữu ích!

+0

Tôi đã thử đặt nút lập trình thành trạng thái được đánh dấu, nhưng nó vẫn không hoạt động. –

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