gpt4 book ai didi

ios - 我无法发送 handlePan : to my UIScrollView?

转载 作者:行者123 更新时间:2023-11-29 03:08:35 25 4
gpt4 key购买 nike

我尝试做一些我认为现在很简单的事情。但它会产生一个错误,从而引发几个问题。

首先,我尝试在 UICollectionView 中执行拖动操作。但我仍然希望该 View 可以滚动。我还没有找到任何(还?)可以直接解决此问题的方法。

我观察到在 viewDidLoad 时,我的 UICollectionView 已经有一个 UIPanGestureRecognizer 其目标操作设置为 View 和选择器 handlePan:.

所以我想......我会获取那个手势识别器,并插入一个垫片,这样我就有机会首先处理平移手势。如果它满足我的阻力要求,我会处理它,否则,我会让它正常运行。为此,我将这段代码添加到我的 UICollectionViewController 子类中的 viewDidLoad 中:

for (UIGestureRecognizer *gesture in self.collectionView.gestureRecognizers) {
if ([gesture isKindOfClass: [UIPanGestureRecognizer class]]) {
[gesture removeTarget: nil action:nil]; // clear out the default handlePan: target
[gesture addTarget: self action: @selector(drag:)]; // replace it with my own shim
}
}

效果很好(我用捏合识别器完成了这个)。但是当我实现我的 shim 方法时:

- (IBAction)drag:(id)sender {
NSLog(@"drag %@", sender);
[self.collectionView handlePan: sender];
}

Xcode 发出错误:

No visible @interface for 'UICollectionView' declares the selector 'handlePan:'

这让我很困惑。我知道该方法没有出现在 UIScrollView 的文档化界面中,但我可以看到那是它所针对的选择器。我可能期待一个警告,但不是一个错误,我认为 Objective-C 方法分派(dispatch)是运行时和动态的。如何克服这一点?

切线地,我很好奇是否有更好/惯用/规范的方法来实现在 UIScrollView 上拖动并仍然保持滚动(但是,即使我做错了,我仍然想了解错误)。

最佳答案

误解了原来的问题,因为 Xcode 在编译时提示未知的选择器,你可以将目标转换为 id 来绕过警告。我仍然不确定我会这样做,或者确定 Apple 不会因为使用私有(private) API 而退回它,但它是:

[(id)self.collectionView handlePan: sender];

关于ios - 我无法发送 handlePan : to my UIScrollView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487003/

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