gpt4 book ai didi

objective-c - 调配 initWithFrame : doesn't work for objects in a NIB

转载 作者:行者123 更新时间:2023-12-04 02:44:57 27 4
gpt4 key购买 nike

我正在 MKMapView 和 UIScrollView 上调配 initWithFrame: 和 dealloc,以添加和删除通知监听器以监视与外部设备的连接,以便我可以为这些 View 连接其他手势识别器,如下所示:

+ (void) swizzleMethodsForFooCategory
{
SwizzleInstanceMethods(self, @selector(initWithFrame:), @selector(foo_initWithFrame:));
SwizzleInstanceMethods(self, @selector(dealloc), @selector(foo_dealloc));
}

- (id) foo_initWithFrame: (CGRect) frame
{
NSLog(@"foo_initWithFrame: called");
self = [self foo_initWithFrame: frame];
if (self != nil)
{
NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
[center addObserver: self
selector: @selector(foo_connectionDidSucceed)
name: @"PM_connectionDidSucceed"
object: nil];
[center addObserver: self
selector: @selector(foo_didDisconnect)
name: @"PM_didDisconnect"
object: nil];
}
return self;
}

- (void) foo_dealloc
{
NSLog(@"foo_dealloc called");
[[NSNotificationCenter defaultCenter] removeObserver: self name: @"PM_connectionDidSucceed" object: nil];
[[NSNotificationCenter defaultCenter] removeObserver: self name: @"PM_didDisconnect" object: nil];
[self foo_dealloc];
}

- (void) foo_connectionDidSucceed
{
// Add gesture recognizers.
}

- (void) foo_didDisconnect
{
// Remove gesture recognizers.
}

这对于我在代码中创建的 View 非常有用,但如果我在 XIB 中声明它们,我的方法就不会被调用。我使用调配而不是继承,因为我不想硬编码此支持 - 我希望能够在每个目标的基础上添加它。

我可以做什么来 Hook 这些对象,以便为这些类型的所有对象添加手势识别器,无论我是通过编程方式还是在 NIB 中创建它们?

最佳答案

从 NIB 实例化的 View 对象使用 -initWithCoder: 进行初始化,因此我会尝试对其进行调配。

关于objective-c - 调配 initWithFrame : doesn't work for objects in a NIB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5972393/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com