我一直在为OS X上传一个上传menubar应用程序的小图片.我NSView为上传的项目创建了自定义子类.
这是默认情况下的样子:
鼠标事件由视图NSViewController按以下方式处理:
import Cocoa
class MenuItemController: NSViewController {
private var trackingArea: NSTrackingArea?
override func mouseEntered(theEvent: NSEvent) {
if let v = self.view as? MenuItemView {
v.shouldHighlight = true
v.needsDisplay = true
}
}
override func mouseExited(theEvent: NSEvent) {
if let v = self.view as? MenuItemView {
v.shouldHighlight = false
v.needsDisplay = true
}
}
override func viewDidLoad() {
super.viewDidLoad()
if (trackingArea == nil) {
trackingArea = NSTrackingArea(rect: self.view.bounds, options: [.ActiveAlways, .MouseEnteredAndExited], owner: self, userInfo: …Run Code Online (Sandbox Code Playgroud) 我的理解是viewForTableColumn:row:仅针对可见行被调用。
我使用以下命令确认了这一点:NSRange rowsInRect = [aTableView rowsInRect:[aTableView visibleRect]]; NSInteger lastVisibleRow = rowsInRect.location + rowsInRect.length;
但是对于Mavericks,viewForTableColumn:row在不向下滚动的情况下被调用了很多次。
例如,如果我的最后一个可见行是35,则为139行调用数据源方法。
有人可以解释吗?
可可中基于单元格的视图和基于视图的表格视图之间的主要区别是什么?
我的理解是基于单元格的表视图基本上用于显示字符串,而基于视图的表用于自定义单元格。用户事件(例如拖动行,选择等)可以在基于视图的视图中进行处理。
基于单元格的表视图使用objectValueForTableColumn:方法,而基于视图的表使用viewForTableColumn:方法。
我的理解正确吗?或者这些表视图之间是否还有其他设计问题。何时基于单元格以及何时基于视图。
提前致谢