2015-09-21 26 views
9

Tôi có một lớp con UITableViewCell tùy chỉnh có chứa một số phương pháp IBAction được kết nối từ ngòi bút.IBAction bên trong UITableViewCell không được gọi trong iOS 9

Trong iOS 8, mọi thứ hoạt động như mong đợi. Nếu người dùng chạm vào một trong các nút, thì gọi IBAction thích hợp. Nếu người dùng chạm vào bất cứ nơi nào khác trên ô, số UITableView didSelectRowAtIndexPath sẽ được gọi.

Trong iOS 9, các phương pháp IBAction của tôi không bao giờ được gọi. UITableViewdidSelectRowAtIndexPath luôn được kích hoạt bất kể nơi người dùng chạm vào ô (nút hay không).

Dự án được biên dịch theo Xcode 6/Swift 1.2.

Tôi tìm thấy bài đăng này trên diễn đàn Apple không có giải pháp. Họ dường như có cùng một vấn đề.

https://forums.developer.apple.com/thread/16179

Trả lời

22

tôi đã tìm ra giải pháp, hy vọng câu trả lời này sẽ tiết kiệm được một người nào khác thời điểm đó.

Tôi đã kế thừa cơ sở mã này và nó có một số vấn đề. UITableViewCell's không hoạt động trong iOS 9 không sử dụng UITableViewCell ngòi ngách w/a ContentView. Thay vào đó, ai đó đã tạo ra một ngòi UIView và sau đó chỉ nó vào một lớp con tùy chỉnh UITableViewCell. Các ngòi bút không có một số ContentView và dường như iOS 9 có chút cầu kỳ hơn về điều đó. Triển khai này hoạt động tốt dưới iOS 8 và không có lỗi trình biên dịch hoặc lỗi thời gian chạy hoặc cảnh báo.

Giải pháp là tạo một lớp con mới UITableViewCell và để Xcode tự động tạo ngòi cho nó. Sau đó, tôi sao chép trên tất cả các giao diện người dùng và mã từ ngòi cũ và dán nó vào ContentView của ngòi mới. Sau đó tôi đã phải sửa các ràng buộc và rewire các kết nối đến lớp con tùy chỉnh.

+6

Hoặc chỉ thêm UITableViewCell từ thư viện đối tượng trong cùng một tệp xib, copypaste/relayout/relink IBOutlets/set lớp cơ sở, sau đó xóa chế độ xem cũ. – jki

+1

Cảm ơn vì điều này! Thực sự bực bội. –

+1

Cảm ơn bạn rất nhiều vì đã chia sẻ. Đã lãng phí cả ngày của tôi về điều này cho đến khi tôi nhìn thấy câu trả lời của bạn. – user3144836

3

chỉ cần thêm dòng này trong phương pháp tableViewCellForRowAtIndexPath

cell.contentView.userInteractionEnabled = false; 
return cell; 

nhưng đây không phải là một giải pháp thích hợp.

iOS 9, đặt chế độ xem nội dung vào ô xem bảng, mặc dù bạn sử dụng ô/xib tùy chỉnh. Chế độ xem nội dung được thêm sau ô tùy chỉnh, nó nằm trên đầu trang của nó.

Để giải quyết điều này đúng, chỉ cần thay thế chế độ xem ô/xib tùy chỉnh bằng UITableviewCell từ thư viện đối tượng [từ nơi bạn thường kéo & thả UIButton, UILable, v.v ...];

+0

Đây là một giải pháp tuyệt vời nếu bạn muốn khắc phục nhanh. Tôi đang sử dụng khung bên thứ ba ngừng hoạt động. Tất cả những gì tôi phải làm là vô hiệu hóa các lần truy cập trên contentview. trong initWithCoder (nó là một tập tin nib). –

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