当我设置delaysContentTouches = false时,静态单元格的表格不会滚动

时间:2016-02-04 16:22:51

标签: swift uitableview uiscrollview uibutton highlight

问题:突出显示与滚动

当我轻轻点击它们时,我的按钮在单元格内部没有突出显示。我不得不点击很长时间才能看到按钮的敲击状态。

所以我这样做是为了在visionDidLoad()中将delaysContentTouches设置为false(我没有管理其他方法):

   for index in tableView.subviews {
        if (index.isKindOfClass(UIScrollView)) {
            let scrollViewFound = index as! UIScrollView
            scrollViewFound.delegate = self
            scrollViewFound.delaysContentTouches = false
            scrollViewFound.canCancelContentTouches = true
            scrollViewFound.scrollEnabled = true
        }
    }

这样按钮正确突出显示,但我不能向上或向下滚动表格,除非我开始从其中一个空单元格中拖动 - >空单元格中的userInteractionEnable = false

我需要什么:

能够突出显示按钮,还能滚动表格。 是否可以同时拥有可滚动视图和突出显示的按钮?

我尝试了什么

我试过调用这个函数:

func touchesShouldCancelInContentView(view: UIView) -> Bool {
    print("touchesShouldCancelInContentView happening---------")
    return true
}

永远不会被召唤。我试过覆盖但它给出了一个错误:

  

Method不会覆盖其超类

中的任何方法

这很奇怪,因为UITableViewController继承自UIScrollView。我也尝试将UIScrollViewDelegate添加到类定义中,但当然它会产生另一个错误,这是多余的。

额外信息

的声明如下:

class Settings: UITableViewController, UITextFieldDelegate { ...

tableView 由静态单元格

组成

细胞

  • 有些是空的:其中UserInteractionEnable = false
  • 有些按钮带有文本字段:我希望这些按钮突出显示。 UserInteractionEnable = true。按钮操作由 .TouchUpInside
  • 调用
  • 有些人有标签和支票图片:他们的行动会在didSelectRowAtIndexPath中调用,这将改变标签颜色并检查图片
  

也许有必要说当用户点击任何单元格didSelectRowAtIndexPath时它会   调用一个函数来关闭键盘。

1 个答案:

答案 0 :(得分:1)

你试图将错误的类子类化,这就是为什么它不起作用。您必须继承<select ng-model="selectedDevice" ng-options="item as key for (key,item) in devices['Block Devices'] "> <option value="">Select Device</option> </select> 类本身,而不是UITableView。 你能试试以下吗?

- 首先

对TableView类进行子类化以覆盖UITableViewController函数。

touchesShouldCancelInContentView

- 第二次

class UIDraggableTableView: UITableView { override func touchesShouldCancelInContentView(view: UIView) -> Bool { if (view.isKindOfClass(UIButton)) { return true } return super.touchesShouldCancelInContentView(view) } } 课程中,当TableViewController被调用时,请在viewDidLoad()之后追加以下内容:

super.viewDidLoad()

这可以解决您的问题。

此答案的部分内容取自this StackOverflow post