3 ปีที่ผ่านมาและข้อผิดพลาดยังคงอยู่ใน Xcode เวอร์ชั่นเสถียรล่าสุด (7.3) เห็นได้ชัดว่าแอปเปิ้ลจะไม่แก้ไขได้ตลอดเวลาเร็ว ๆ นี้ออกจากนักพัฒนาที่มีสองตัวเลือก: ออกเลือกและตั้งค่า UserInteractionEnabled เป็นเท็จหรือวิธีการกระเพื่อม
หากคุณมีปุ่มบนข้อความของคุณดูเดิมจะไม่พอเพียง
วิธีการแก้ปัญหาที่ไม่มีรหัสเปลี่ยนแปลงอย่างรวดเร็ว:
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
}
}
}
Objective-C:
#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