Apple thực sự hài hước. Ý tôi là, họ nói rằng tác phẩm này hoạt động:Bí quyết nào để truyền sự kiện cho người trả lời tiếp theo trong chuỗi phản hồi?
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch = [touches anyObject];
NSUInteger numTaps = [touch tapCount];
if (numTaps < 2) {
[self.nextResponder touchesBegan:touches withEvent:event];
} else {
[self handleDoubleTap:touch];
}
}
Tôi có bộ điều khiển chế độ xem. Như bạn biết, Xem bộ điều khiển kế thừa từ UIResponder. Điều đó xem điều khiển tạo ra một đối tượng MyView kế thừa từ UIView, và thêm nó như là một subview để xem riêng của nó.
Vì vậy, chúng tôi có:
Xem bộ điều khiển> có Chế độ xem (tự động)> có MyView (là UIView).
Bây giờ bên trong MyView tôi đặt mã như trên với NSLog in "chạm MyView". Nhưng tôi chuyển tiếp sự kiện cho người trả lời tiếp theo, giống như ở trên. Và bên trong ViewController tôi có phương thức touchesBegan khác chỉ in NSLog a la "bộ điều khiển xem cảm động".
Bây giờ hãy đoán điều gì: Khi tôi chạm vào MyView, nó in "chạm MyView". Khi tôi chạm vào bên ngoài của MyView, đó là quan điểm của VC sau đó, tôi nhận được một "bộ điều khiển xem cảm động". Vì vậy, cả hai công việc! Nhưng những gì không hoạt động là chuyển tiếp sự kiện. Bởi vì bây giờ, thực sự là phần trả lời tiếp theo nên là bộ điều khiển khung nhìn, vì không có gì khác trong số này. Nhưng phương thức xử lý sự kiện của VC không bao giờ được gọi khi tôi chuyển tiếp nó.
% $ &! § !!
Ý tưởng?
Đã tìm ra những thứ kỳ lạ Trả lời tiếp theo của MyView là chế độ xem của bộ điều khiển chế độ xem. Điều đó có ý nghĩa, bởi vì MyView là một tiểu thuyết về điều đó. Nhưng tôi đã không sửa đổi UIView này từ bộ điều khiển xem. nó không có gì tùy chỉnh. Và nó không thực hiện bất kỳ xử lý sự kiện cảm ứng nào. Không phải thông báo sẽ được chuyển sang bộ điều khiển chế độ xem? Làm thế nào tôi có thể để nó vượt qua? Nếu tôi loại bỏ mã xử lý sự kiện trong MyView, thì sự kiện sẽ đến độc đáo trong trình điều khiển khung nhìn.
Cảm ơn eJames. MyView cho tôi biết phần trả lời tiếp theo chính xác là khung nhìn của bộ điều khiển khung nhìn. Các địa chỉ bộ nhớ phù hợp hoàn hảo. tuy nhiên, touchesBegan này sẽ không được gọi. nhưng bây giờ tôi thấy rằng phương thức này sẽ được gọi trên khung nhìn của trình điều khiển khung nhìn, nhưng không phải trên chính trình điều khiển khung nhìn. nhưng sau đó, sự kiện này sẽ không tiếp tục sủi bọt lên bộ điều khiển xem của chế độ xem không xử lý nó không? hoặc là một trường hợp đặc biệt khác bởi vì tôi gửi nó bằng tay? –
Vâng, tôi cho rằng điều đó có ý nghĩa. Việc thực thi mặc định của 'touchesBegan:' không làm gì cả, vì vậy khi bạn truyền nó vào đối tượng 'UIView' tiếp theo, nó chỉ đơn giản là kết thúc. Có khả thi để chỉ cần chuyển sự kiện cảm ứng vào viewController theo cách thủ công không? –
Bạn đã thử gọi '[super touchesBegan: ...]' thay vì '[self.nextResponder touchesBegan: ...]' Tôi đã thấy một số người sử dụng phương pháp đó, nhưng tôi không chắc nó làm gì. –