- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个奇怪的问题。我有一个自定义组件来为我处理 UICollectionView 的布局。该代码是用 Swift 编写的。
class MyCustomCollectionViewHandler: NSObject {
let collectionView: UICollectionView
weak var dataSource: UICollectionViewDataSource?
weak var delegate: UICollectionViewDelegate?
init(collectionView: UICollectionView) {
self.collectionView = collectionView
super.init()
self.collectionView.delegate = self
self.collectionView.dataSource = self
}
// Rest of the code not relevant here
}
extension MyCustomCollectionViewHandler: UICollectionViewDataSource, UICollectionViewDelegate {
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
//
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
//
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
//
}
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
//
}
}
但是,我不想处理来自 MyCustomCollectionViewHandler 部分的所有其他委托(delegate)回调(尤其是 UIScrollViewDelegate 部分)。所以我想如果可能的话我会手动转发所有委托(delegate)调用,我用该代码来做到这一点:
extension MyCustomCollectionViewHandler {
// forwarding selector if we don't implement it
override func forwardingTargetForSelector(aSelector: Selector) -> AnyObject? {
if delegate?.respondsToSelector(aSelector) ?? false {
return delegate
}
if dataSource?.respondsToSelector(aSelector) ?? false {
return dataSource
}
return super.forwardingTargetForSelector(aSelector)
}
override func respondsToSelector(aSelector: Selector) -> Bool {
return super.respondsToSelector(aSelector) || delegate?.respondsToSelector(aSelector) ?? false || dataSource?.respondsToSelector(aSelector) ?? false
}
}
我从 Objective-C 类初始化我的 MyCustomCollectionViewHandler
:
- (void)initCollectionStructure
{
self.collectionViewHandler = [[MyCustomCollectionViewHandler alloc] initWithCollectionView:self.collectionView];
//-- So all the other calls fallback here
self.collectionViewHandler.delegate = self;
}
我还在这里实现了 UIScrollViewDelegate 调用,如下所示:
- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return nil;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
}
最后,我的问题是:我的 scrollViewDidScroll
从未被调用,而 viewForZoomingInScrollView
则被调用。
如果我在 MyCustomCollectionViewHandler
上实现 scrollViewDidScroll
,则会调用它。
但我希望在 ObjC 部分调用它。
有人可以看看我是否做错了什么吗?谢谢;-)
最佳答案
我认为方法override func respondsToSelector(aSelector: Selector) -> Bool
可能有问题。如果您不希望处理程序响应委托(delegate)方法,您应该retrun false
?像:
override func respondsToSelector(aSelector: Selector) -> Bool {
if delegate?.respondsToSelector(aSelector) ?? false {
return false
}
if datasource?.respondsToSelector(aSelector) ?? false {
return false
}
return super.respondsToSelector(aSelector)
}
关于ios - 转发 UIScrollViewDelegate 调用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37674768/
您好,我正在尝试在用户滚动应用程序时触发一个功能。 这是我的代码 我定义了一个实现 UIScrollViewDelegate 的类 MyViewController @interface Circle
我有一个带有 UIScrollView 的 View ,带有一些文本(通过 JSON 加载)。我需要检测用户何时到达滚动的末尾(我在这里看到了其他关于它的问题)但问题是,我已经完成了 .h 实现 UI
当我实例化 ScrollView 并将其添加到 ViewController 类中的 self.view 并将 ScrollView 的委托(delegate)设置为 self 时,委托(delega
我使用以下代码来初始化新的 UIScrollView: UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMak
这可能是一些sort of duplicate of this question .但我试图应用它的答案无济于事。 我有一个 UIScrollView 和 pagingEnabled。我想使用 UIS
我想在 scrollViewDidScroll 中添加一些内容.你有两种可能: 1号 public override void Scrolled (UIScrollView scrollView){
我遇到了一个奇怪的问题。我有一个自定义组件来为我处理 UICollectionView 的布局。该代码是用 Swift 编写的。 class MyCustomCollectionViewHandler
我有一个 UIView,它有一个 UIScrollView subview ,并且是一个 UIScrollViewDelegate。自从我实现了 viewForZoomingInScrollView
我已经实现了这些方法,将 View Controller 指定为 UIScrollViewDelegate,设置内容大小,并设置 UIScrollView 的委托(delegate)属性。但是,出于某
我正在对 UIViewController 进行子类化,并在其 View 中实例化一个 UIScrollView,该 View 的高度为 480,宽度为 640(常规宽度的 2 倍)。分页已启用,因此
我在下面的行中面临警告 此警告在更改以下行后出现 @interface BDSAppDelegate : UIResponder 到 @interface BDSAppDelegate : UIRe
我可以使用 UIScrollViewDelegate 的协议(protocol)扩展来为所有符合此协议(protocol)的 View 提供 scrollViewDidScroll 的默认实现吗? 因
当我拖动它时,我的 View 似乎在滚动(边栏出现并四处移动),但我的委托(delegate)函数没有触发。 问题:为什么协议(protocol)函数中的 println 永远不会被调用?作为背景,我
我有一个 UICollectionView,它是 UIScrollView 的 subview 。当 UICollectionView 内部有滚动时,是否可以绕过 UIScrollViewDelega
我有一个 UIScrollView 和一个 UIView header ,它贴在 ScrollView 的顶部,并在用户向下滚动时从全尺寸缩小到小尺寸。当然,这些都是通过 ScrollView 委托(
我有一个 UICollectionView 子类。 我想为 UIScrollViewDelegate 中的 scrollViewDidScroll 添加默认实现 有没有办法从 UICollection
在我的 iPhone 应用程序中,我将 uiwebview 的委托(delegate)设置为文件所有者,但它没有调用 uiscrollviewdelegate 方法 我的代码是 - (void)web
我正在从事一个项目,其中我必须大量使用 UITableViews。所以,我想检测 TableView (UIScrollView) 是否正在滚动。 首先,我使用 UIViewController 中的
在将 UIScrollView 实现到 UITableViewCell 中时出现错误。 class MyItemTableViewCell: UITableViewCell, UIScrollView
我正在使用符合这些协议(protocol)的自定义 UITableView: UITableView 数据源 UIScrollViewDelegate 我的应用程序中的许多地方都使用了这个表格 Vie
我是一名优秀的程序员,十分优秀!