2009-09-03 22 views
6

Tôi đã viết một phân lớp của UIControl theo dõi một số cử chỉ mà tôi quan tâm. Trong tài liệu cho các liệt kê UIControlEvents, nó nói rằng có một loạt các số sự kiện được gọi là UIControlEventApplicationReserved đó là "có sẵn để sử dụng ứng dụng." Điều này có nghĩa là tôi tự do sử dụng phạm vi số này cho các sự kiện tùy chỉnh của riêng mình không?Bạn có thể thực hiện các sự kiện tùy chỉnh với UIControlEventApplicationReserved không?

Nếu có, ai đó có thể vui lòng cho tôi biết cách kích hoạt sự kiện không? Cách rõ ràng tôi có thể nghĩ đến để làm điều này là:

enum { 
    ... 
    MyCustomEvent = 65, 
    ... 
}; 

... 

UIEvent* customEvent; 

... 

for (id target in [self allTargets]) 
{ 
    for (NSString* action in [self actionsForTarget:target forControlEvent:MyCustomEvent]) 
    { 
      [self sendAction:NSSelectorFromString(action) to:target forEvent:customEvent]; 
    } 
} 

Thậm chí có hoạt động không?

+0

OK, tôi biết đây là một câu hỏi cũ, nhưng bạn có thực hiện bất kỳ tiến bộ nào về vấn đề này không? –

Trả lời

20

Được rồi, đây là chủ đề cũ nhưng tôi sẽ thêm câu trả lời cho câu hỏi này. Tôi thực sự không thể chắc chắn liệu bạn có thể sử dụng mặt nạ này cho ứng dụng của riêng bạn ngay cả khi tôi nghi ngờ nó.

Nhưng tôi có thể cho bạn biết chắc chắn cách sử dụng. Đối với khởi động giá trị này mặt nạ các bit ở vị trí 24, 25, 26 và 27. Bạn nên viết một enum của riêng bạn mà sử dụng bit này chỉ, ví dụ:

enum { 
    MyPrimaryActionEvent = 1 << 24, 
    MySecondaryActionEvent = 1 << 25, 
}; 

Khi đã xong, bạn có thể đăng ký cho các hành động:

[myButton addTarget:self action:@selector(someAction:) forControlEvents: MyPrimaryActionEvent]; 

Mỗi lần hành động MyPrimaryActionEvent được kích hoạt, sẽ nhận được thông báo someAction :. Bây giờ làm thế nào để kích hoạt hành động đó là lên đến nút chính nó. Trong lớp con UIControl riêng của bạn, bạn có thể kích hoạt sự thay đổi như sau:

[self sendActionsForControlEvents:MyPrimaryActionEvent]; 

này sẽ gửi tất cả các hành động cho tất cả các chỉ tiêu đã đăng ký cho sự kiện MyPrimaryActionEvent. Và bạn đã hoàn tất.

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