2014-10-24 5 views
0

Я принял код Mattt Thompson Method Swizzling в моем проекте (спасибо Mattt Thompson!), Он очень хорошо работает в iOS 7 и ранее, но в iOS 8 кажется, что этот метод swizzling больше не работает, deleteBackwardSwizzle is никогда не называли, код выглядит следующим образом:Метод Swizzling не работает в iOS 8?

static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
    Class class = [self class]; 
    // When swizzling a class method, use the following: 
    // Class class = object_getClass((id)self); 
    SEL originalSelector = @selector(deleteBackward); 
    SEL swizzledSelector = @selector(deleteBackwardSwizzle); 

    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); 
    } 
}); 
+0

Как это происходит? –

+0

Извините, не прояснилось, deleteBackwardSwizzle никогда не звонил! – lmnbeyond

ответ

0

После некоторого дальнейшего исследования в этом методе deleteBackward, я понял, что это не имеет ничего общего с swizzling. Я следовал инструкциям от detect-backspace-in-uitextfield-in-ios8, и все снова работает хорошо!

Смежные вопросы