Tôi có vấn đề này với iOS/UIWebView
, không triển khai makeFirstResponder
trong UIWindow
, cũng không phải webViewDidEndEditing
hoặc shouldBeginEditingInDOMRange
. Tuy nhiên, với việc sử dụng Swizzling tôi đã có thể tạo một danh mục trợ giúp cho phép truy xuất trả lời đầu tiên hiện tại, cũng như đăng thông báo mỗi lần thay đổi trả lời đầu tiên. Thực sự bực bội như thế nào tất cả điều này nên được API công cộng, nhưng không phải là, như sự gian lận thường không phải là một goto đầu tiên, nhưng điều này làm việc tốt đủ.
Thứ nhất, thiết lập tiêu đề mục của bạn:
@interface UIResponder (Swizzle)
+ (UIResponder *)currentFirstResponder;
- (BOOL)customBecomeFirstResponder;
@end
Sau đó, loại thực
@implementation UIResponder (Swizzle)
// It's insanity that there is no better way to get a notification when the first responder changes, but there it is.
static UIResponder *sCurrentFirstResponder;
+ (UIResponder *)currentFirstResponder {
return sCurrentFirstResponder;
}
- (BOOL)customBecomeFirstResponder {
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithCapacity:2];
if(sCurrentFirstResponder) {
[userInfo setObject:sCurrentFirstResponder forKey:NSKeyValueChangeOldKey];
}
sCurrentFirstResponder = self;
if(sCurrentFirstResponder) {
[userInfo setObject:sCurrentFirstResponder forKey:NSKeyValueChangeNewKey];
}
[[NSNotificationCenter defaultCenter] postNotificationName:kFirstResponderDidChangeNotification
object:nil
userInfo:userInfo];
return [self customBecomeFirstResponder];
}
@end
Cuối cùng, sử dụng một helper như JR Swizzle, trao đổi các lớp học.
#import "JRSwizzle.h"
- (void)applicationLoaded {
if(![UIResponder jr_swizzleMethod:@selector(becomeFirstResponder) withMethod:@selector(customBecomeFirstResponder) error:&error]) {
NSLog(@"Error swizzling - %@",error);
}
}
Nghĩ rằng tôi muốn chia sẻ. Hợp lệ trong cửa hàng ứng dụng vì nó không sử dụng API riêng tư, và trong khi Apple cảnh báo chống lại các lớp cơ sở khó khăn thì không có nguyên tắc nào chống lại việc làm như vậy.
Chính xác cùng một sự cố ở đây, bạn đã bao giờ tìm thấy giải pháp chưa? – Kappe