我的视图包含一个水平滚动滚动视图,其中包含多个垂直滚动表视图。水平和垂直嵌套滚动视图
参见图:
然而,表视图是在滚动视图阻断水平滚动时光标在它们。
我该如何让滚动传递给超级视图?
代码应用
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
var viewController: ViewController!
func applicationDidFinishLaunching(aNotification: NSNotification) {
viewController = ViewController(nibName: "ViewController", bundle: nil)
viewController.view.translatesAutoresizingMaskIntoConstraints = false
window.contentView!.addSubview(viewController.view)
//...
}
//...
}
视图控制器
class ViewController: NSViewController {
@IBOutlet weak var scrollView: NSScrollView!
//...
func addListView(listPath: String) {
let listView = ListViewController(nibName: "ListView", bundle: nil)
listView!.listPath = listPath
listView!.view.translatesAutoresizingMaskIntoConstraints = false
scrollView.contentView.addSubview(listView!.view)
//...
}
//...
}
列表视图
class ListViewController: NSViewController {
@IBOutlet weak var itemsTitleView: NSTextField!
@IBOutlet weak var itemsTableView: MyTableView!
//...
}
的TableView
class MyTableView: NSTableView {
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
// Drawing code here.
}
var mainScrollView: NSScrollView? {
let app = NSApplication.sharedApplication()
let delegate = app.delegate as! AppDelegate
return delegate.viewController.scrollView
}
override func mouseDown(theEvent: NSEvent) {
// do nothing
}
override func scrollWheel(theEvent: NSEvent) {
if theEvent.scrollingDeltaY == 0 {
// It's a horizontal scroll -> redirect it
if let tableScrollView = enclosingScrollView, mainScrollView = mainScrollView {
mainScrollView.scrollWheel(theEvent)
}
} else {
// It's a vertical scroll -> behave normally
super.scrollWheel(theEvent)
}
}
}
表视图是否需要水平滚动? –
嗨保罗,没有表视图将永远不会水平滚动。 – fff
哎呀,我的坏,有内部表视图周围的自定义视图 – fff