2013-03-03 34 views
9

Tôi đã thấy nhiều câu hỏi trong diễn đàn này, cung cấp câu trả lời cho chủ đề này "UIButton bên trong UIView, khi hoạt ảnh không hoạt động", nhưng sau khi thử các câu trả lời nhưUIBiew bên trong một UIView không hoạt động sau khi UIView hoạt hình

a) UIViewAnimationOptionAllowUserInteraction to the options 
b) subView.setUserInteractionEnabled = YES 
c) [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside]; 

ai trong số họ đang làm việc cho tôi :-(

Dưới đây là kịch bản. App là trong chế độ phong cảnh và một UIView gọi menuView được đặt tại x = 480, y = 0. chiều cao của nó = 200 và chiều rộng = 150. Do đó, khi tôi nhấn vào nút ở góc trên cùng bên phải, mã sau đây được thực hiện

- (IBAction)showMenu { 
    [menuView setUserInteractionEnabled:YES]; 
    [optionsButton setUserInteractionEnabled:YES]; 
    [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
         self.view.frame = CGRectOffset(self.view.frame, 0, 200); 
        } 
        completion:NULL]; 
} 

Đầu ra ?: Chế độ xem đang xuất hiện, nhưng tùy chọnButton trong menuView không thể nhấp được. Tôi nối với một sự kiện, đã làm một NSLog (@ "nút Options nhấp"), nhưng không có gì xảy ra :-(

Hãy cho tôi biết những gì tôi đang làm sai

Cập nhật: Khi tôi đặt subview đó là "menuView" bên trong self.view, sau đó khi chạy và nhấp vào tùy chọnButton, tôi nhận được thông báo NSLog.Chỉ khi tôi chỉ định origin.x của menuView là 480 và cao hơn, nó không hoạt động ..

+1

Có thể không phải vì bạn chưa kết nối ổ cắm. – CodaFi

+1

chưa được kết nối với ổ cắm? Nếu bạn đang nói về nút hoặc chế độ xem, tôi đã nối bot vào ổ cắm trong tệp .h @ property (yếu, nonatomic) IBOutlet UIView * menuView; @ property (yếu, nonatomic) IBOutlet UIButton * optionsButton; – thandasoru

+1

Đặt điểm ngắt và đảm bảo, sau đó. – CodaFi

Trả lời

24

Nếu bạn có thể thấy UIButton, thì userInteractionEnabled (YES theo mặc định!) Được đặt và giám sát của nó userInteractionEnabled trong toàn bộ hệ thống phân cấp là CÓ - bạn sẽ có thể tương tác với nó.

Hoạt ảnh sẽ không bao giờ thay đổi thuộc tính userInteractionEnabled của bạn! Vì vậy, những gì bạn đang làm chỉ đơn giản là không cần thiết. Nếu bạn cố kích hoạt tương tác trong khi hoạt ảnh - đó là một câu chuyện khác và chỉ là một tùy chọn được chuyển đến thông báo hoạt ảnh.

Vì vậy, nếu đó không phải là vấn đề của bạn (và có lẽ là không), thì tôi đoán một trong các khung của người giám sát đang cắt xén UIButton!

Bây giờ bạn thấy, nếu một UIButton (hoặc bất kỳ UIView) nằm ngoài khung một UIView 's, nó vẫn có thể được nhìn thấy, trừ khi clipsToBounds được thiết lập trên SuperView.

Và kết quả của tình huống đó là: Bạn có thể thấy tôi, nhưng bạn không thể chạm vào tôi.

+1

Ok, tôi đã thực hiện chiều rộng của UIButton bên trong UIView (menuView) là 185. Chiều rộng của menuView là 200. Làm cách nào để tìm hiểu xem khung của superview (có chiều rộng là 480) đang cắt xén UIButton? Bạn có thể giúp tôi ở đây không? – thandasoru

+1

Nếu tôi đặt menuView bên trong self.view và chạy ứng dụng, nó hoạt động. Chỉ khi tôi đặt menuView bên ngoài và cố gắng để bù đắp self.view.frame 200, sau đó nó không hoạt động. Tôi nghĩ rằng nó có thể do thực tế là menuView không phải là bên trong self.view. vì vậy nếu tôi tăng chiều rộng của self.view để phù hợp với menuView, sau đó nó sẽ làm việc, phải không? – thandasoru

+1

Nếu bạn đang đặt menuView "bên ngoài" self.view - thì nó chính xác ở đâu? Bạn có thể mô tả thứ bậc chính xác của các khung nhìn không? –

5

Trong trường hợp của tôi thiếu ràng buộc về chiều cao của chế độ xem có chứa khiến chiều cao khung nhìn là 0. Các nút được hiển thị, bên dưới chế độ xem nhưng không thể chạm vào.

1

Trong trường hợp của tôi, có vẻ như quá trình chuyển đổi hoạt ảnh của tôi chưa hoàn tất. Tôi đã quên đặt completeTransition:Bool vào cuối phương thức animateTransition:context của tôi.

2

Đối với tôi, đó là tất cả về một lỗi bị bỏ qua trong chính mã hoạt ảnh. Trường hợp chiều cao mới của tôi được gọi là tôi đã thực sự gọi chiều rộng mới của tôi, và nơi chiều rộng mới của tôi đã được gọi là tôi đã thực sự gọi chiều cao mới của tôi, gây ra UIView được siêu dài nhưng siêu hẹp, do đó đẩy tất cả nội dung trong trung tâm của chế độ xem, ngoài tầm với của chế độ xem.

  • Thay đổi màu nền UIViews thành Đỏ để bạn thực sự có thể nhìn thấy màu nền hoạt ảnh.

  • Nếu UIView của bạn ở trong chế độ xem khác, hãy bật clipSubviews để bạn chỉ thấy những gì thực sự được bật trong số subView.

  • Chạy dự án của bạn.

Nếu UIView của bạn không có chiều cao và chiều rộng bình thường, nhiều khả năng bạn đã bỏ qua một số mã trong cuộc gọi động.

Đảm bảo rằng x, y, width, height của bạn đang được hiển thị theo đúng thứ tự trong mã hoạt ảnh.

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