UICollectionViewCell 方法调配
UICollectionViewCell method swizzling
我在 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
- 这是 100% 的
UICollectionViewCell
类别。
- 此时,在
+(void) load
中,只有UITableViewCell
class
通过(如预期)
找到问题了。
如果你调配一个 subclass 的方法,它没有覆盖该方法,那么你将覆盖它的 super class 方法。它的 superclass 无法响应某些选择器;当然是这样了
顺便谢谢大家的帮助
我在 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
- 这是 100% 的
UICollectionViewCell
类别。 - 此时,在
+(void) load
中,只有UITableViewCell
class 通过(如预期)
找到问题了。 如果你调配一个 subclass 的方法,它没有覆盖该方法,那么你将覆盖它的 super class 方法。它的 superclass 无法响应某些选择器;当然是这样了
顺便谢谢大家的帮助