2012-11-25 26 views
13

Tôi đã đặt UIButton bên trong UIView tùy chỉnh và nút không nhận được bất kỳ sự kiện chạm nào (nó không vào trạng thái được đánh dấu, vì vậy sự cố của tôi là không về việc không thể kết nối một bộ xử lý bên trong lên trên). Tôi đã thử cả hai đặt nó vào XIB trong giao diện Builder, và cũng đã cố gắng lập trình thêm UIButton vào UIView một cách riêng biệt, cả hai đã kết thúc mà không có may mắn. Tất cả các khung nhìn của tôi đều nằm trong UIScrollView, vì vậy trước tiên tôi có thể chặn UIScrollView, vì vậy tôi cũng đã thêm một nút lập trình chính xác giống như cách tôi thêm chế độ xem tùy chỉnh vào UIScrollView, và nút hoạt động, loại bỏ khả năng UIScrollView có thể là nguyên nhân. Xem tôi hiearchy là như thế này:UIButton bên trong UIView không phản hồi các sự kiện chạm

ss

Nút là qua xem hình ảnh, và lớp trước không chiếm nút của tôi hoàn toàn, vì vậy không có lý do đối với tôi không được thể chất tương tác với các nút. Ở bên cạnh xem mã tùy chỉnh của tôi, tôi là tạo ra quan điểm của tôi như vậy:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     UIView *sub = [[[NSBundle mainBundle] loadNibNamed:@"ProfileView" owner:self options:nil] objectAtIndex:0]; 
     [self addSubview:sub]; 
     [sub setUserInteractionEnabled:YES]; 
     [self setUserInteractionEnabled:YES]; 
     CALayer *layer = sub.layer; 
     layer.masksToBounds = YES; 
     layer.borderWidth = 5.0; 
     layer.borderColor = [UIColor whiteColor].CGColor; 
     layer.cornerRadius = 30.0; 
     /*layer.shadowOffset = CGSizeZero; 
     layer.shadowRadius = 20.0; 
     layer.shadowColor = [[UIColor blackColor] CGColor]; 
     layer.shadowOpacity = 0.8; 
     */ 
    } 
    return self; 
} 

Tôi đã thử tất cả các kết hợp của setUserInteractionsEnabled, và không có may mắn. (Có, cũng đặt chúng để kiểm tra trong giao diện Builder quá). Tôi cũng đã đọc trong một câu hỏi khác với một vấn đề tương tự mà tôi nên cố gắng ghi đè 'canBecomeFirstResponder' để trả về 'CÓ' và tôi cũng đã làm điều đó. Nhưng vấn đề vẫn còn, tôi không thể nhấp vào nút. Tôi đã không đưa ra bất kỳ thuộc tính đặc biệt, cài đặt cho nút, nó chỉ là một thường xuyên. Các đối tượng khác của tôi trong chế độ xem (nhãn bên dưới, chế độ xem hình ảnh phía sau nút, v.v.) đang hoạt động bình thường mà không có sự cố. Điều gì có thể sai ở đây?

Xin cảm ơn,

Có thể.

CẬP NHẬT: Đây là sự sao chép nhanh chóng của sự cố: https://dl.dropbox.com/u/79632924/Test.zip Cố gắng chạy và nhấp vào nút.

+0

bạn có thể trích xuất chế độ xem này thành dự án thử nghiệm nhỏ không? –

+0

Câu hỏi ngu ngốc: Bạn có nhớ liên kết nút đó với IBAction không? –

+0

@HotLicks có, chúng được liên kết. nhưng vấn đề không phải là về xử lý sự kiện không kích hoạt khi chạm vào, vấn đề là nút không nhận được (hoặc, ít nhất, phản ứng lại) sự kiện liên lạc ở tất cả. –

Trả lời

18

Nhìn vào dự án thử nghiệm, tôi tin rằng vấn đề của bạn theo cách bạn tạo TestView, bạn không chỉ định khung cho nó, vì vậy về cơ bản chế độ xem gốc là 0 và các bản xem phụ bạn thấy từ XIB mở rộng ra khỏi chế độ xem gốc và do đó không nhận được gì trong chuỗi trả lời .

Bạn nên chỉ định khung khi tạo TestView hoặc điều chỉnh khung sau khi tải tệp XIB.

+0

vâng, ngay sau khi tải lên dự án thử nghiệm, nó dễ nhìn hơn nhiều (vì có ít điều hơn trong dự án thử nghiệm). bây giờ các nút của tôi đang hoạt động như một sự quyến rũ! –

2

Tôi đã tìm thấy giải pháp. Tôi đã khởi tạo giao diện tùy chỉnh của tôi như:

MyView *view = [[MyView alloc] init]; 

Tôi đã khởi tạo nó thay vì với một khung kích thước quan điểm của tôi, và nó bắt đầu phản ứng với các sự kiện:

CGRect rect = CGRectMake(0,0,width,height); 
MyView *view = [[MyView alloc] initWithFrame:rect]; 
5

Tôi cũng gặp sự cố này. Nguyên nhân của tôi là khung hình giám sát UIButton có chiều cao 0, vì vậy tôi tin rằng mặc dù một liên lạc đang diễn ra, nhưng nó không được chuyển xuống nút.

Sau khi đảm bảo rằng trình giám sát của nút đã chụp một hình chữ nhật lớn hơn làm khung mà các thao tác nút hoạt động.

Nguyên nhân gốc của vấn đề này ở bên cạnh tôi là triển khai bố cục tự động bị lỗi (tôi quên đặt giới hạn chiều cao cho giám sát của nút).

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