7

Tôi có một khung nhìn chínhController, nó được gọi là WelcomeViewController. Tôi có một lớp con UIView và có một số nội dung liên quan đến khung nhìn trong đó. Tôi muốn thêm một số UITapGestureRecognizer vào phân lớp đó. Tôi chỉ muốn trình nhận dạng cử chỉ xác nhận các vòi bên trong chế độ xem phụ đó. Làm thế nào để làm điều đó. Tôi có nên đặt các UITapGestureRecognizer trong phân lớp hoặc tôi nên đặt nó trong Chào mừng vc. Cảm ơn trước.Vấn đề với một UITapGestureRecognizer

Ngoài ra, tôi đã chơi xung quanh với nó một bó và dường như không thể tìm ra.

Trả lời

1

Bạn có thể chọn người nhận của UITapGestureRecognizer, nó không phải là cùng một lớp đã khởi tạo trình nhận dạng (ví dụ: self). Nếu bạn tạo ra nó trong WelcomeViewConroller của bạn, bạn có thể chọn bất kỳ subview để nhận các sự kiện:

[tapRecognizer addTarget:aSubview action:@selector(myMethod:)]; 
+0

Không, phần đó tôi ổn. Tôi nên thêm Trình nhận dạng cử chỉ vào chế độ xem phụ nào. – Andrew

+0

Chế độ xem phụ sẽ phản hồi (các) lần nhấn. –

+0

Nhưng tôi dường như không thể làm điều đó để làm việc – Andrew

18

Nó phụ thuộc vào việc bạn muốn xử lý vòi nước trong đối tượng giao diện tùy chỉnh của bạn hoặc trong điều khiển xem.

Nếu trong giao diện, thêm video này vào nó init hoặc nơi thích hợp khác:

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[self addGestureRecognizer:tapRecognizer]; 
[tapRecognizer release]; 

Nếu trong bộ điều khiển xem, thêm này trong viewDidLoad (hoặc các vị trí thích hợp):

UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[yourCustomView addGestureRecognizer:tapRecognizer]; 
[tapRecognizer release]; 
Bộ xử lý

cũng giống nhau:

- (void)handleTap:(UITapGestureRecognizer*)recognizer 
{ 
    // Do Your thing. 
    if (recognizer.state == UIGestureRecognizerStateEnded) 
    { 
    } 
} 

Hãy xem SimpleGestureRecognizers ví dụ và bạn sẽ nhận được một ý tưởng khá tốt.

---- Cập nhật 2012/10/01 ----

Đối với những người bạn của những người muốn sử dụng kịch bản/nib, đây là siêu đơn giản!

  1. Mở bảng phân cảnh/nib của bạn.

  2. Kéo-thả loại trình nhận dạng bạn muốn từ Thư viện đối tượng vào phần tử giao diện người dùng mà bạn muốn.

  3. Nhấp chuột phải vào đối tượng trình nhận dạng, sau đó kết nối selector với IBAction trong Chủ sở hữu tệp (thường là UIViewController.) Nếu bạn cần, hãy kết nối đại biểu.

  4. Bạn đã hoàn tất! enter image description here

+0

Tôi giỏi với tất cả những điều đó. Vấn đề là tôi subclassed một UIView vào quan điểm chính của tôi. Bây giờ, tôi có thể thêm UITapGestureRecognizer vào. Các subview (mà không phải là làm việc) hoặc xem chính (mà làm cho nó hoạt động khi tôi gõ bất cứ nơi nào, bao gồm cả bên ngoài subview) – Andrew

+0

Tôi đã tinh chế câu trả lời của tôi. Điều đó có ý nghĩa hơn với tình huống của bạn không? –

+0

Chế độ xem chính của bạn có thể không chuyển sự kiện tới chế độ xem phụ. Ngoài ra, bạn có thể kiểm tra xem điểm tiếp xúc có nằm trong khung phụ hay không. – TheBlack

2

Tôi nghĩ bạn cần đặt đại biểu của trình nhận dạng cử chỉ làm bộ điều khiển xem bạn muốn xử lý các vòi. Ví dụ:

gestureRecognizer.delegate = self; 

chẳng hạn. Sau đó, chấp nhận giao thức UIGestureRecognizerDelegate trong tiêu đề của bạn.

+0

Đây là vấn đề đối với tôi - cảm ơn. –

1

Tôi nghĩ bạn có thể gặp phải vấn đề tương tự như tôi gặp phải.Khi bạn gọi [yourCustomView addGestureRecognizer: tapRecognizer]; bạn cần tham khảo qua UIView * để trong ví dụ của bạn hãy thử:

UIView *mySubView = yourCustomView; 
[mySubView addGestureRecognizer:tapRecognizer]; 

hy vọng điều này sẽ hữu ích.

1

Vui lòng kiểm tra view.userInteractionEnabled=true;

+0

Không phải là tùy chọn này theo mặc định? – Andrew

+0

có, Mặc định là –