日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 在线观看国产一区 | 国产做受高潮动漫 | 久久亚洲第一 | 国产精品极品白嫩在线 | 久久伊人一区 | 男男野外做爰全过程69 | 日日撸夜夜撸 | 一二三四区视频 | 国产91热爆ts人妖系列 | 91网站免费视频 | 91最新地址| 国产日韩一区二区三区 | 超碰97在线资源站 | 性感美女一区二区三区 | www.自拍 | 一级片免费网址 | 亚洲国产欧美日韩在线 | 国产情侣在线播放 | 久久精品成人av | 日韩在线视频免费 | 成年人视频在线观看免费 | 日韩久久综合 | 亚洲自拍电影 | 中出亚洲 | 国产高清在线免费观看 | 成人国产精品久久久网站 | 三上悠亚痴汉电车 | 99涩涩| 日本精品一区二区视频 | 成人午夜在线播放 | 欧美1314| 久久精品7 | 麻豆91在线播放 | 人人草人人澡 | 国产日韩精品久久 | 欧美理论视频 | 亚洲美女色视频 | 69人妻精品久久无人专区 | 夜夜草导航| 久久国产二区 | 中文字幕亚洲图片 | 日韩免费高清视频网站 | 色网站入口 | a在线v| 四虎视频 | 中文字幕99页 | 亚洲日本色图 | 中出在线视频 | 久久国产一 | 亚洲色图 美腿丝袜 | 男女激情四射网站 | 日批网址| 波多野结衣家庭主妇 | 国产香蕉尹人视频在线 | 少妇脚交调教玩男人的视频 | 久久尤物视频 | 午夜男人网| 九九九久久久久 | 中文字幕观看在线 | 成人1区2区 | 密桃成熟时在线观看 | 国产精品毛片av | 色av一区二区三区 | 国产伦精品免费视频 | 精品人人人人 | 亚洲午夜在线播放 | 成人爱爱网站 | 91爽爽 | 色吧综合| 欧美激情黑人 | 国产一区精品在线观看 | 特级西西444www高清大视频 | 91色精品| 波多野结衣中文字幕在线播放 | 欧产日产国产69 | 91精品国产91久久久久久久久久久久 | 神马老子午夜 | 亚洲最大的av网站 | 国产精品高潮呻吟久久aⅴ码 | 欧美在线中文字幕 | 激情四射网站 | 亚洲A∨无码国产精品 | 中文字幕乱码中文乱码b站 国产一区二区三区在线观看视频 | 这里只有精品视频 | 婷婷六月色| 国产精品入口66mio男同 | 国产精品黄网站 | 国产超碰在线 | 成都免费高清电影 | www.youjizz.com在线观看 | 久久6 | 色偷偷888欧美精品久久久 | 亚洲精华液一区二区 | 天天色宗合 | 欧美在线小视频 | 黄视频免费观看 | 黄色视屏在线 | 自拍偷拍20p | 一区二区三区日本视频 |