इसके 3 साल हो गए हैं और बग अभी भी Xcode (7.3) के नवीनतम स्थिर संस्करण में मौजूद है। स्पष्ट रूप से ऐप्पल वॉन्ट इसे किसी भी समय जल्द ही तय कर सकता है ताकि डेवलपर्स को दो विकल्पों के साथ छोड़ दिया जा सके: चयन करने योग्य छोड़ने और UserInteraction को अक्षम करने के लिए सेट करना।
यदि आपके पास अपने textView पर एक बटन है तो पूर्व पर्याप्त नहीं होगा।
स्विफ्ट में कोई कोड-परिवर्तन-आवश्यक समाधान:
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