2010-06-28 33 views
19

UIButton bên trong UIScrollView không kích hoạt trên vòi. Hãy giúp giải quyết nó.UIButton bên trong UIScrollView không kích hoạt trên vòi

// Add a button 
UIButton *btn1 = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; 
btn1.frame = CGRectMake(0, 0, 26, 18); 
btn1.bounds = CGRectMake(0, 0, 30.0, 30.0); 
[btn1 addTarget:self action:@selector(buttonClick1:) 
         forControlEvents:UIControlEventTouchUpInside]; 
[scrollView addSubview:btn1]; 


- (void)buttonClick1:(id)sender { 
    int dd = 4; 
} 
+0

Kiểm tra chiều cao hoặc chiều rộng của scrollView để xem nếu nó là 0, và bật 'clipSubview' – onmyway133

Trả lời

15

tôi thấy công cụ này:

Nhưng scrollview sẽ chặn chạm từ nút trừ khi bạn đặt userInteractionEnabled và tính exclusiveTouch hoặc không có trên scrollview. Nhưng điều đó sẽ đánh bại mục đích của việc có một scrollview bên trong một nút tôi nghĩ.

(Xem Can we put a UIButton in a UIScrollView and vice versa in iPhone)

Nhưng làm thế nào để làm điều đó?

Giả sử bạn có một UIScrollView * sv ... sau đó

sv.userInteractionEnabled = YES; 
sv.exclusiveTouch = YES; 

Tôi cũng xin thêm

sv.canCancelContentTouches = YES; 
sv.delaysContentTouches = YES; 
+0

Nó hoạt động !!! Cảm ơn bạn Max. – echo

+0

canCancelContentTouches and delaysContentTouches là YES theo mặc định. ;) – Andy

+9

Không hoạt động cho tôi trên iOS 7. –

10

Bạn phải thiết lập kích thước nội dung của quan điểm của bạn. Điều đó phải lớn hơn hoặc bằng kích thước nội dung của scrollView.

Do kích thước mặc định của chế độ xem của bạn là 320 x 480 (3,5 "võng mạc) và 320 x 568 (4" võng mạc). Vì vậy, tăng chiều cao của chế độ xem là:

self.view.frame=CGRectMake(0, 0, 320, 700); 

Sau đó, thêm điều này làm tiểu sử cho cuộn của bạn, bạn sẽ nhận được giải pháp.

6

OLD ĐÁP: Tất cả tôi phải làm trong iOS 7 được thiết

[_scrollView setDelaysContentTouches:NO]; 

UPDATE: Sau khi thực hiện một nghiên cứu nhỏ hơn nó xuất hiện rằng nếu vấn đề của bạn là UIButton nhấp chuột dường như chỉ được gọi là đôi khi, thì đó thực sự là hành vi mong muốn bên trong một UIScrollView. A UIScrollView sử dụng thuộc tính delaysContentTouches để tự động xác định xem người dùng có đang cố gắng cuộn hoặc cố bấm một nút bên trong chế độ xem cuộn hay không. Tôi cho rằng tốt nhất là không thay đổi hành vi này thành mặc định là NO vì làm như vậy sẽ khiến bạn không thể cuộn nếu ngón tay của người dùng trên một nút.

+0

cảm ơn bạn! điều này xứng đáng được chú ý nhiều hơn !! –

4

tôi đã phải đối mặt với vấn đề này cùng, những gì tôi đã làm là thay vì thêm vào nút để xem container, tôi đã thêm nó vào xem di chuyển trên đầu trang của cái nhìn container:

scrollView.insertSubview(buttonA, aboveSubview: containerView) 

cấu trúc của tôi là:

-View 
--ScrollView 
---ContainerView 

Tôi hy vọng điều này có thể giúp ích cho bất kỳ ai.

+0

Rất muốn biết tại sao điều này là cần thiết thực sự .. bất kỳ lời giải thích? Cảm ơn lời khuyên, đã giải quyết được vấn đề của tôi. – alasker

+0

@alasker, thành thật mà nói tôi không có lời giải thích, nhưng nó làm tôi vui khi biết rằng nó giúp bạn. –

0

tôi đã có cấu trúc tương tự như câu trả lời Giovanny và đang sử dụng snapkit. Vấn đề của tôi là ContainerView của tôi thực sự có chiều cao là 0. Tôi đã có thể nhận thấy điều này bằng cách đặt ClipsToBounds = true trên ContainerView (không có gì được hiển thị sau khi thực hiện điều này vì giới hạn có chiều cao là 0).

Bất kỳ chế độ xem nào trong giới hạn chế độ xem gốc sẽ không nhận được sự kiện chạm vào bên trong.

Khắc phục của tôi là đặt ContainerView sang trái và dưới cùng bằng với Chế độ xem và trên cùng bằng ScrollView (đầu của ScrollView được bù đắp từ gốc của Chế độ xem).

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