এটি 3 বছর হয়েছে এবং বাগটি এখনও এক্সকোড (7.3) এর সর্বশেষ স্থিতিশীল সংস্করণে বিদ্যমান রয়েছে। স্পষ্টতই অ্যাপল এটি বিকাশকারীদের দুটি বিকল্প দিয়ে শীঘ্রই যেকোন সময় ঠিক করতে পারবে না: বেছে নেওয়ার যোগ্য রেখে যাওয়া এবং ব্যবহারকারীর অন্তর্ভুক্তকরণটি মিথ্যা বা পদ্ধতি সুইজলিংয়ে সক্ষম করা হয়েছে।
আপনার পাঠ্যে একটি বোতাম থাকলে দেখুন পূর্বেরটি যথেষ্ট হবে না।
দ্রুত-নো-কোড-পরিবর্তন-প্রয়োজনীয় সমাধান:
import UIKit
extension UITextView {
@nonobjc var text: String! {
get {
return performSelector(Selector("text")).takeUnretainedValue() as? String ?? ""
} set {
let originalSelectableValue = selectable
selectable = true
performSelector(Selector("setText:"), withObject: newValue)
selectable = originalSelectableValue
}
}
}
উদ্দেশ্য গ:
#import <objc/runtime.h>
#import <UIKit/UIKit.h>
@implementation UITextView (SetTextFix)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
SEL originalSelector = @selector(setText:);
SEL swizzledSelector = @selector(xxx_setText:);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
BOOL didAddMethod =
class_addMethod(class,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
});
}
- (void)xxx_setText:(NSString *)text {
BOOL originalSelectableValue = self.selectable;
self.selectable = YES;
[self xxx_setText:text];
self.selectable = originalSelectableValue;
}
@end