cdts/xdts-ios 3/TreeHole/Code/Utility/ImagePicker/BlocksKit/UIKit/UITextView+BlocksKit.m
2023-07-27 09:20:00 +08:00

159 lines
5.4 KiB
Objective-C

//
// UITextView+BlocksKit.h
// BlocksKit
//
#import "UITextView+BlocksKit.h"
#import "A2DynamicDelegate.h"
#import "NSObject+A2BlockDelegate.h"
#pragma mark Delegate
@interface A2DynamicUITextViewDelegate : A2DynamicDelegate
@end
@implementation A2DynamicUITextViewDelegate
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
BOOL ret = YES;
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textViewShouldBeginEditing:)])
ret = [realDelegate textViewShouldBeginEditing:textView];
BOOL (^block)(UITextView *) = [self blockImplementationForMethod:_cmd];
if (block)
ret &= block(textView);
return ret;
}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textViewDidBeginEditing:)])
[realDelegate textViewDidBeginEditing:textView];
void (^block)(UITextView *) = [self blockImplementationForMethod:_cmd];
if (block)
block(textView);
}
- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
BOOL ret = YES;
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textViewShouldEndEditing:)])
ret = [realDelegate textViewShouldEndEditing:textView];
BOOL (^block)(UITextView *) = [self blockImplementationForMethod:_cmd];
if (block)
ret &= block(textView);
return ret;
}
- (void)textViewDidEndEditing:(UITextView *)textView
{
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textViewDidEndEditing:)])
[realDelegate textViewDidEndEditing:textView];
void (^block)(UITextView *) = [self blockImplementationForMethod:_cmd];
if (block)
block(textView);
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
BOOL ret = YES;
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)])
ret = [realDelegate textView:textView shouldChangeTextInRange:range replacementText:text];
BOOL (^block)(UITextView *, NSRange, NSString *) = [self blockImplementationForMethod:_cmd];
if (block)
ret &= block(textView, range, text);
return ret;
}
- (void)textViewDidChange:(UITextView *)textView
{
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textViewDidChange:)])
[realDelegate textViewDidChange:textView];
void (^block)(UITextView *) = [self blockImplementationForMethod:_cmd];
if (block)
block(textView);
}
- (void)textViewDidChangeSelection:(UITextView *)textView
{
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textViewDidChangeSelection:)])
[realDelegate textViewDidChangeSelection:textView];
void (^block)(UITextView *) = [self blockImplementationForMethod:_cmd];
if (block)
block(textView);
}
- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange
{
BOOL ret = YES;
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)])
ret = [realDelegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange];
BOOL (^block)(UITextView *, NSTextAttachment *, NSRange) = [self blockImplementationForMethod:_cmd];
if (block)
ret &= block(textView, textAttachment, characterRange);
return ret;
}
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
BOOL ret = YES;
id realDelegate = self.realDelegate;
if (realDelegate && [realDelegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:)])
ret = [realDelegate textView:textView shouldInteractWithURL:URL inRange:characterRange];
BOOL (^block)(UITextView *, NSURL *, NSRange) = [self blockImplementationForMethod:_cmd];
if (block)
ret &= block(textView, URL, characterRange);
return ret;
}
@end
#pragma mark - Category
@implementation UITextView (BlocksKit)
@dynamic bk_shouldBeginEditingBlock, bk_didBeginEditingBlock, bk_shouldEndEditingBlock, bk_didEndEditingBlock, bk_shouldChangeCharactersInRangeWithReplacementTextBlock, bk_didChangeBlock, bk_didChangeSelecionBlock, bk_shouldInteractWithTextAttachmentInRangeBlock, bk_shouldInteractWithURLInRangeBlock;
+ (void)load {
[self bk_registerDynamicDelegate];
[self bk_linkDelegateMethods: @{
@"bk_shouldBeginEditingBlock":
@"textViewShouldBeginEditing:",
@"bk_didBeginEditingBlock":
@"textViewDidBeginEditing:",
@"bk_shouldEndEditingBlock":
@"textViewDidBeginEditing:",
@"bk_didEndEditingBlock" :
@"textViewDidEndEditing:",
@"bk_shouldChangeCharactersInRangeWithReplacementTextBlock" :
@"textView:shouldChangeTextInRange:replacementText:",
@"bk_didChangeBlock" :
@"textViewDidChange:",
@"bk_didChangeSelecionBlock" :
@"textViewDidChangeSelection:",
@"bk_shouldInteractWithTextAttachmentInRangeBlock" :
@"textView:shouldInteractWithTextAttachment:inRange:",
@"bk_shouldInteractWithURLInRangeBlock" :
@"textView:shouldInteractWithURL:inRange:",
}];
}
@end