BLKFlexibleHeightBar行为定义器不符合UITableViewDelegate

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BLKFlexibleHeightBar行为定义器不符合UITableViewDelegate相关的知识,希望对你有一定的参考价值。

所以我正在使用this library,它允许我在桌面视图顶部制作一个栏,当我向下滚动时压缩。现在我使用桥接头将其安装在我的Swift项目中。所以我按照实现指南,将所有代码转换为Swift代码。一切正常,直到我在“配置栏行为”部分遇到问题。

条形行为定义器是知道何时放大/缩小条形的部分,具体取决于您在表格中滚动的距离。所以它使用UITableViewDelegate(TVD)这样做。但是看看barBehaviorDefiner的source code,你可以看到它只实现了UIScrollViewDelegate

这就是问题。我需要将tableview的委托设置为BLKFlexibleHeightBarBehaviorDefiner类型的对象之一,但它们不是UITableViewDelegate类型。

self.tableView.delegate = (id<UITableViewDelegate>)myBar.behaviorDefiner;

现在我知道TVD implements SVD作为其中的一部分,但我不能将SVD设置为需要TVD的东西。

这是我尝试过的:

  1. 将我的表链接为UIScrollView而不是UITableView。码: @IBOutlet weak var table: UIScrollView! /* * irrelevant code * */ headerBar.behaviorDefiner = SquareCashStyleBehaviorDefiner() table.delegate = headerBar.behaviorDefiner

这导致条实际压缩,但桌子不随杆移动。它只是保持原样,留下压缩条形的白色空间。

  1. 可选择像实施指南中那样进行铸造。码: @IBOutlet弱var表:UITableView! /* * irrelevant code * */ headerBar.behaviorDefiner = SquareCashStyleBehaviorDefiner() table.delegate = headerBar.behaviorDefiner as? UITableViewDelegate

这不会施展它。当我向下滚动表格时,应用程序什么都不做。

  1. 强迫铸造到UITableViewDelegate。码: @IBOutlet弱var表:UITableView! /* * irrelevant code * */ headerBar.behaviorDefiner = SquareCashStyleBehaviorDefiner() table.delegate = headerBar.behaviorDefiner as! UITableViewDelegate

这将返回错误could not cast value of type 'UIScrollViewDelegate' to 'UITableViewDelegate'

我想这可能是因为我在swift中这样做,但这个错误不应该基于语言?!

答案

我遇到了这个问题。

您需要编辑BLKDelegateSplitter.h @interface声明。替换为:

@interface BLKDelegateSplitter : NSObject <NSObject, UITableViewDelegate>

资料来源:https://github.com/bryankeller/BLKFlexibleHeightBar/issues/42

另一答案

根据新的repo添加此扩展名以解决此问题。更新这对我有用。 如果您使用集合视图而不是更改委托

extension BLKFlexibleHeightBarBehaviorDefiner :UITableViewDelegate{

}

以上是关于BLKFlexibleHeightBar行为定义器不符合UITableViewDelegate的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 行为型模式 -- 迭代器模式(定义结构实例优缺点分析)

行为型模式-迭代器模式

行为模式之迭代器模式

迭代器模式

AG-Grid React,无法在数据更改时更新自定义单元格渲染器。函数组件的行为与类组件不同

004-行为型-11-解析器模式(Interpreter)