日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

macOS NSTableView

發布時間:2024/4/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 macOS NSTableView 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

英文原文地址

趁著項目不緊張,趕緊武裝一下自己,如果有一天移動開發混不下去了,還可以轉轉macOS開發(雖然它和iOS開發的區別很小),如果你是一名iOS的開發者,那么其實你已經掌握了很大一部分macOS的開發技巧了,我用的是Xcode9 + Swift4

我看的是Tutorials上的教程macOS Development Tutorials,一般的控件什么的看一下就可以了,用到的時候再細看。其中稍微有點難度的有NSTableView,NSCollectionView,還有就是macOS上特殊的交互拖拽操作。另外在學習macOS的開發過程中,發現了Cocoa binding這種數據綁定方法,可以讓你在編寫少量代碼的情況下,主要通過Xcode操作綁定數據和UI,有興趣的可以去看看Cocoa Bindings on macOS。

接下來就細細探究一下NSTableView的實現和踩到的一些坑吧。

從 Object Library拖一個table view放到一個view中,約束設置為(0,0,0,0)填滿視圖,看一下NSTableView的結構,圖中的“Table Cell View”是刪除原始的cell,然后從Object Library中拖的“Image & Text Table Cell View”,比原始cell多了一張圖片。

  • 每一列也可以有一個列頭(header row),列頭描述了這一列的數據
  • 每一行代表在數據模型集合中的單獨的一項
  • 每一列展示這個model的指定的屬性

如果要對table view的行數進行修改設置,選中table view而不是包含它的scroll view,在Attributes Inspector中改變 Columns 也就是列數,也可以重命名列的名稱。

如果想一次操作多行數據,可以在 Selection 中勾選 Multiple ,同時在Highlight這里勾選Alternating Rows,當它打開時,table view就會使用交替的背景顏色,就像Finder文件列表一樣,還有很多的設置有興趣的可以看看。

相對于 UITableView,它的主要區別是你可以有多列,及一個可以用來同table view交互的表頭,例如點擊列頭進行 排序 和 選取。

注:選中命名的cell名稱,點擊每個cell,在 Identity Inspector 中設定它的identifier,每個類型的cell都需要設置,接下來便是填充數據了。

  • NSTableViewDataSource:告訴table view有多少行需要展示
  • NSTableViewDelegate:提供將要展示在指定行和列上的cell

跟UItableView一樣,實現兩個協議中你需要的方法,只是方法名稱略有差別 不要忘記設置tableview的代理

tableView.delegate = self tableView.dataSource = self 復制代碼

每一個類別的cell,設置CellIdentifier

fileprivate enum CellIdentifiers {static let NameCell = "NameCellID"static let DateCell = "DateCellID"static let SizeCell = "SizeCellID"} 復制代碼//返回列表行數 func numberOfRows(in tableView: NSTableView) -> Int//獲取每一行的cell func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {var image: NSImage?var text: String = ""var cellIdentifier: String = ""//拿到模型中的數據存到item中guard let item = directoryItems?[row] else {return nil}//判斷所在列if tableColumn == tableView.tableColumns[0] {image = item.icontext = item.namecellIdentifier = CellIdentifiers.NameCell}else if tableColumn == tableView.tableColumns[1] {text = dateFormatter.string(from: item.date)cellIdentifier = CellIdentifiers.DateCell}else if tableColumn == tableView.tableColumns[2] {text = item.isFolder ? "--" : sizeFormatter.string(fromByteCount: item.size)cellIdentifier = CellIdentifiers.SizeCell}//調用 make(withIdentifier:owner:) 來得到一個cell。這個方法通過那個identifier來創建或復用一個cell,然后使用之前提供的數據來填充它if let cell = tableView.make(withIdentifier: cellIdentifier, owner: nil) as? NSTableCellView {cell.textField?.stringValue = textcell.imageView?.image = image ?? nilreturn cell}return nil } 復制代碼

相信只要接觸iOS開發的都能看出來和UITableView的大同小異了,下面再介紹其他NSTbaleView的協議方法

NSTbaleView內容選擇發生改變時調用

func tableViewSelectionDidChange(_ notification: Notification) 復制代碼

doubleAction屬性是雙擊cell時觸發,同時需要設置target

tableView.target = self tableView.doubleAction = #selector(tableViewDoubleClick(_:)) 復制代碼

當用戶點擊任一列頭時,這個table view會調用此方法基于提供的descriptor來進行排序。

func tableView(_ tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) 復制代碼

最終的效果圖是這樣的

詳細的demo代碼可以去我的github下載查看,FileViewer。

轉載于:https://juejin.im/post/5b35d284e51d4558ce5eb63e

總結

以上是生活随笔為你收集整理的macOS NSTableView的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕在线观看网址 | 一级特黄色片 | 精品人妻一区二区三区免费 | 成人网页 | 在线免费日韩 | 能看av的网址 | 人人亚洲 | av高清在线观看 | 成人国产精品久久 | 91av爱爱| 成人免费做受小说 | 国产精品不卡在线观看 | 最好看的中文字幕国语电影mv | 久久免费福利视频 | 91免费观看视频在线 | 天堂va欧美ⅴa亚洲va一国产 | 秋霞成人av | 夜间福利在线观看 | 我和公激情中文字幕 | 国产最新精品视频 | 国产中文字幕久久 | 日韩中文字幕精品视频 | 一区二区三区在线视频观看 | 日韩中文字幕在线视频 | 国产成人在线观看免费网站 | 欧美肥妇bwbwbwbxx| 夜夜夜影院 | 亚洲精品永久免费 | 伊人久久国产精品 | 制服丝袜av电影 | 91久色视频 | 欧美日韩在线播放 | 99人妻少妇精品视频一区 | 91精彩视频| 夜夜骑夜夜骑 | 中文字幕在线三区 | 四季av一区二区凹凸精品 | 黄色片aa | 99福利影院 | 日韩免费在线看 | 在线观看你懂的视频 | 欧洲成人一区二区三区 | av手机天堂网 | 欧美狠狠操 | 久青草影视| 最新国产黄色网址 | 国产wwww | 国产一级黄色 | 无码人妻精品一区二区50 | 今天最新中文字幕mv高清 | av大片网址 | 欧美无玛| 日本高清不卡在线观看 | 国产91精品看黄网站在线观看 | 色老汉av一区二区三区 | 福利视频二区 | 日本成人精品视频 | 国产日b视频 | 国产三级中文字幕 | 亚洲男人天堂2020 | 久久不卡影院 | 日韩在线观看不卡 | 亚洲综合久久av一区二区三区 | 野花中文免费观看6 | 一个人看的视频www 色就是色网站 | 十八禁毛片 | 日本午夜一区二区三区 | 玖玖热在线视频 | 中文字幕av在线播放 | 欧美精品在线视频观看 | 久草网视频在线观看 | 丰满少妇高潮一区二区 | 日少妇av| 日韩久久一区二区三区 | 国产精品久久视频 | 欧美日韩在线不卡 | 91av视频在线播放 | 日韩在线中文 | 疯狂做受xxxx高潮人妖 | 成年人性生活视频 | 国产精品成久久久久三级 | 精品免费一区二区 | 日韩亚洲欧美综合 | 宅男噜噜噜66一区二区 | 国产剧情在线 | 久久成人亚洲 | 中文字幕亚洲一区 | 丝袜制服中文字幕 | 尤物视频在线免费观看 | 国产乡下妇女做爰毛片 | 国产精品v亚洲精品v日韩精品 | 日韩视频一区二区三区四区 | 怡红院一区| 国产免费av一区 | 污污网站在线免费观看 | 夜晚福利视频 | 久久久久久色 | 国产一区二区三区视频免费在线观看 | 国产成人一区二区三区电影 |