2013-01-18 55 views
5

Làm cách nào để gửi tin nhắn UILongPressGesture tới một đối tượng?Làm cách nào để gửi UILongPressGesture theo chương trình?

Tôi biết cách gửi chạm chứ không phải cử chỉ. Ví dụ: nếu tôi muốn gửi một liên lạc tôi có thể sử dụng:

[button sendActionsForControlEvents: UIControlEventTouchUpInside]; 

và nút sẽ nhận được "chạm vào bên trong". Tôi cần phải làm điều tương tự với cử chỉ báo chí dài.

Hãy nghĩ thử nghiệm giao diện người dùng tự động. Gọi một bộ chọn liên kết với cử chỉ sẽ không kiểm tra một cách có ý nghĩa.

+0

Bạn có ý gì khi "nhắn tin tới một đối tượng"? – iProgrammed

+0

@iProgrammed Vui lòng xem câu hỏi đã được viết lại của tôi để làm rõ. –

Trả lời

7

Nhập <UIKit/UIGestureRecognizerSubclass.h> và đặt thủ công thuộc tính state phù hợp với chuỗi trạng thái bạn cần mô phỏng. Điều này sẽ làm cho các cặp mục tiêu/hành động được thêm vào được gọi. Sau mỗi lần đặt trạng thái theo cách thủ công, bạn phải để chạy vòng lặp chạy để các tin nhắn được gửi đi.

Đối với UILongPressGestureRecognizer, để có được đúng trình tự của các quốc gia như được tìm thấy trong một chuỗi thực tế, 'liên lạc, giữ, kéo, phát hành' của các cử chỉ, tôi đã viết đoạn mã sau vào một lớp con UIViewController bên viewDidLoad:.

UILongPressGestureRecognizer *r = [[UILongPressGestureRecognizer alloc] init]; 
[self.view addGestureRecognizer:r]; 
[r addTarget:self action:@selector(recognize:)]; 
r.state = UIGestureRecognizerStateBegan; 
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; 
r.state = UIGestureRecognizerStateChanged; 
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; 
r.state = UIGestureRecognizerStateEnded; 
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; 
[r reset]; 

Tôi tưởng tượng điều này sẽ rất nguy hiểm trong mã sản xuất (bạn có thể muốn sau đó gọi reset nhưng tôi không tìm thấy sự khác biệt giữa việc thực hiện hay không trong thử nghiệm của mình), nhưng trường hợp sử dụng của bạn là kiểm tra tự động để xác minh rằng các mục tiêu và hành động đã được đặt chính xác, điều này có thể đáp ứng nhu cầu của bạn.

+0

Tôi vẫn có một số vấn đề về thời gian và để giải quyết vấn đề, nhưng điều này đặt tôi đi đúng hướng (và chắc chắn trả lời câu hỏi). Cảm ơn! –

0

Bạn có biết người chọn đối tượng đã gắn với số UILongPressGestureRecognizer của mình không? Nếu bạn biết điều đó, bạn chỉ có thể gọi nó. Nếu bạn hỏi liệu có một phương thức như touchesMoved:(UITouch *)touch không thì câu trả lời là không.

+0

Giống như '[nút sendActionsForControlEvents: UIControlEventTouchUpInside]', nhưng với một cử chỉ thay vì một sự kiện cảm ứng. Bạn đang nói trong câu thứ hai của bạn rằng không, nó không phải là có thể? –

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