2012-11-26 37 views
8

Tôi đang cố gắng đặt UIButton trong chế độ xem bổ sung UICollectionView (chân trang). Tôi đã kết nối UIButton bằng cách sử dụng bảng phân cảnh cho một lớp con của UICollectionViewCell và có thể thay đổi thuộc tính của nó theo chương trình bao gồm cả hình nền. Tuy nhiên, khi tôi kết nối sự kiện bên trong của nút với một phương pháp, nó không cháy. Trong thực tế, các nút thậm chí không xuất hiện để được đáp ứng trực quan để liên lạc của người dùng. Trong xử lý sự cố, tôi đã cố gắng thêm UIButton vào tiêu đề của bộ sưu tập và xem hành vi giống nhau. Việc thêm nút vào chế độ xem không liên quan sẽ tạo ra các hiệu ứng tương tác khi được nhấn.Tôi làm cách nào để sử dụng UIButton trong chế độ xem bổ sung UICollection?

Có điều gì đặc biệt tôi cần làm để triển khai UIButton trong chế độ xem bổ sung UICollection không?

Trả lời

16

Chế độ xem bổ sung phải là UICollectionReusableView (hoặc phân lớp của chúng), không phải là UICollectionViewCell.

Dù sao, nếu nút không phản hồi, điều đầu tiên cần làm là kiểm tra xem tất cả các chế độ xem tổ tiên của nó có userInteractionEnabled được đặt thành YES. Tạm dừng trong trình gỡ lỗi khi nút trên màn hình và thực hiện việc này:

(lldb) po [[UIApp keyWindow] recursiveDescription] 

Tìm nút trong danh sách và sao chép địa chỉ của nút đó. Sau đó, bạn có thể kiểm tra nó và mỗi superview. Ví dụ:

(lldb) p (BOOL)[0xa2e4800 isUserInteractionEnabled] 
(BOOL) $4 = YES 
(lldb) p (BOOL)[[0xa2e4800 superview] isUserInteractionEnabled] 
(BOOL) $5 = YES 
(lldb) p (BOOL)[[[0xa2e4800 superview] superview] isUserInteractionEnabled] 
(BOOL) $6 = YES 
(lldb) p (BOOL)[[[[0xa2e4800 superview] superview] superview] isUserInteractionEnabled] 
(BOOL) $8 = YES 
(lldb) p (BOOL)[[[[[0xa2e4800 superview] superview] superview] superview] isUserInteractionEnabled] 
(BOOL) $9 = YES 
(lldb) p (BOOL)[[[[[[0xa2e4800 superview] superview] superview] superview] superview] isUserInteractionEnabled] 
(BOOL) $10 = NO 
(lldb) po [[[[[0xa2e4800 superview] superview] superview] superview] superview] 
(id) $11 = 0x00000000 <nil> 

Ở đây tôi phát hiện ra rằng tất cả các quan điểm lên vào thư mục gốc (các UIWindow) trở YES từ isUserInteractionEnabled. Giám sát của cửa sổ là không.

+1

@robmayhoff: Vấn đề là tôi đã phân loại nhầm cha mẹ. Cảm ơn vì đã bắt được điều này! – markdorison

+0

@markdorison Ha ha, thú vị. Tôi đã không thực sự mong đợi đó là vấn đề. –

+0

@robmayhoff: Tôi đã rất ngạc nhiên khi bạn thực hiện một thay đổi và nó đã hoạt động! – markdorison

0

Tôi có nút tùy chỉnh phân lớp UIControl và đặt nó bên trong UICollectionReusableView. Để làm cho nó hoạt động, tôi đã thực hiện mọi tiểu đơn lẻ của kiểm soát và các cuộc phỏng vấn của các cuộc khảo sát phụ của nó không xử lý tương tác của người dùng.

func disableUserInteractionInView(view: UIView) { 
    view.userInteractionEnabled = false 
    for view in view.subviews { 
     self.disableUserInteractionInView(view) 
    } 
} 

// My control has a subview called contentView which serves as a container 
// of all my custom button's subviews. 
self.disableUserInteractionInView(self.contentView) 

Kể từ khi thêm mã đó, tất cả thính giả sự kiện để .TouchUpInside sẽ bắn, và kiểm soát trực quan sẽ làm nổi bật khi ép xuống.

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