2012-07-10 26 views
5

Tôi biết rằng câu hỏi này phải được trả lời rất nhiều lần rồi, nhưng nó thực sự khiến tôi đau đầu ngay bây giờ.touchesBegan in UIView không được gọi là

touchesBegan: không được gọi trong UIView của tôi. Trước khi tôi thêm nó vào ứng dụng của mình, trước tiên tôi đã thực hiện một dự án dùng thử. Trong dự án thử nghiệm, mọi thứ hoạt động hoàn hảo. Những gì tôi đã làm là phân lớp UIView nơi touchesBegan: đang được triển khai và thêm UIView này làm chế độ xem phụ của chế độ xem khác. Chế độ xem thứ hai này có nút hiển thị UIView được phân lớp sau khi được nhấp. Một lần nữa, tất cả mọi thứ hoạt động chính xác như thế nào tôi muốn nó.

Bây giờ, khi tôi đã làm điều tương tự trong ứng dụng hiện có của mình, phương thức touchesBegan: (cũng như touchesMoved:) không bao giờ được gọi. Bất cứ ai có thể giải thích cho tôi tại sao? Tôi chỉ không hiểu tại sao nó không bao giờ được gọi.

+1

là tương tác người dùng kích hoạt cho tầm nhìn của bạn? – alinoz

+0

Khi tôi bật tương tác của người dùng, nó vẫn không nhận ra các điểm chạm.Mặc dù vậy, trong dự án thử nghiệm của tôi, tôi thậm chí còn không kích hoạt tương tác của người dùng, nhưng nó vẫn nhận ra các điểm chạm. –

Trả lời

7

Tôi chỉ tìm thấy câu trả lời cho điều này. Tôi quên đề cập đến quan điểm là bên trong một UIView, mà userInteraction bị vô hiệu hóa (Nó bị tắt theo mặc định). Vì vậy, khi tôi bật userInteraction của chế độ xem này, các lần chạm hiện đang được nhận dạng.

1

Trong trường hợp của tôi background = UIColor.clearColor() là lý do tại sao touchesBegan không được gọi. Rõ ràng nó không được gọi là các yếu tố trong suốt.

0

Tôi đã đấu tranh về vấn đề này trong một thời gian ... và tôi tìm ra. Tôi nghĩ rằng chức năng ghi đè Bài viết nghe trên màn hình chính: cái đầu tiên trên cây bảng phân cảnh của ViewController! Tôi rất thích đăng hình ảnh bảng phân cảnh của mình để rõ ràng hơn, nhưng tôi không thể! ;)

Dù sao, NẾU bạn có các bản xem trước, chúng có thể bao gồm chế độ xem chính ... theo cách này, chạm sẽ không "tiếp cận" chế độ xem chính.

Để tránh điều này, bạn sẽ phải thiết lập các nền tài sản trong Thuộc tính Inspector để Mặc định cho TẤT CẢ CÁC subviews. Bằng cách này, nền sẽ được minh bạch và các liên lạc sẽ có thể đạt được quan điểm chính.

Nếu bạn không muốn thiết lập nền trong suốt có cái gì đó bạn có thể làm:

-Thêm một lối thoát của lần cuối cùng bạn (với thiết lập nền)

-Thêm một cử chỉ tap recognizer để nó

-Handle vòi nước xử lý bàn phím

ES.

Trong thuộc tính:

//The last view's outlet 
@IBOutlet weak var ContainerView: UIView! 

Trong viewDidLoad():

let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:")) 
self.ContainerView.addGestureRecognizer(tap) 

Bên ngoài:

func handleTap(recognizer: UITapGestureRecognizer){ 
    self.view.endEditing(true) 
} 
Các vấn đề liên quan