BLKFlexibleHeightBar行为定义器不符合UITableViewDelegate

时间:2016-08-30 19:40:05

标签: ios swift uitableview uiscrollview

所以我正在使用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
    
  2. 这会导致条实际压缩,但桌子不会随着条移动。它只是停留在原处,留下了压缩条形的白色空间。

    1. 可选择像执行指南中那样进行投射。代码:

      @IBOutlet弱var表:UITableView!

      /*
      * irrelevant code *
      */
      
      headerBar.behaviorDefiner = SquareCashStyleBehaviorDefiner()
      table.delegate = headerBar.behaviorDefiner as? UITableViewDelegate
      
    2. 这不会施展它。当我向下滚动表格时,应用程序什么都不做。

      1. 强制施放到UITableViewDelegate。代码:

        @IBOutlet弱var表:UITableView!

        /*
        * irrelevant code *
        */
        
        headerBar.behaviorDefiner = SquareCashStyleBehaviorDefiner()
        table.delegate = headerBar.behaviorDefiner as! UITableViewDelegate
        
      2. 这会返回错误could not cast value of type 'UIScrollViewDelegate' to 'UITableViewDelegate'

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

2 个答案:

答案 0 :(得分:1)

我遇到了这个问题。

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

@interface BLKDelegateSplitter : NSObject <NSObject, UITableViewDelegate>

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

答案 1 :(得分:0)

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

extension BLKFlexibleHeightBarBehaviorDefiner :UITableViewDelegate{

}