1

我在UITableViewCell类别上调配方法时出现意外行为

我的.m文件:

#import "UICollectionViewCell+CostraintFix.h"
#import <objc/runtime.h>

@implementation UICollectionViewCell (CostraintFix)

+(void)load {
    Method original_setBounds, swizzled_setBounds;
    original_setBounds = class_getInstanceMethod(self, @selector(setBounds:));
    swizzled_setBounds = class_getInstanceMethod(self, @selector(swizzled_setBounds:));

    method_exchangeImplementations(original_setBounds, swizzled_setBounds);

}

- (void) swizzled_setBounds:(CGRect) bounds{
    [self swizzled_setBounds:bounds];
    self.contentView.frame = bounds;
}
@end

好吧,当我开始我的项目时,我有这个:

-[UINavigationButton swizzled_setBounds:]: unrecognized selector sent to instance 0x7fe2dbb301c0
  1. 这是 100% 的一个UICollectionViewCell类别。
  2. 此时,在 中+(void) load,只有UITableViewCell类通过(如预期的那样)
4

1 回答 1

1

发现了问题。如果你 swizzle 一个不覆盖该方法的子类的方法,那么你将覆盖它的超类方法。它的超类无法响应某些选择器;当然是这样。

顺便谢谢你的帮助

于 2015-02-21T22:20:51.570 回答