gpt4 book ai didi

Swift - 在 NSTableView 中使用复选框获取行索引

转载 作者:行者123 更新时间:2023-12-03 17:47:14 25 4
gpt4 key购买 nike

我正在用 Swift 学习 Cocoa。我用 Viewbased 创建了一个 NSTableView。

Simple tableview

我还将复选框操作连接到 ViewController。但是当我单击该复选框时,它打印 -1 而不是行索引。我必须先选择该行,然后单击复选框才能获得正确的索引号。无论如何,是否可以获取每行上每个复选框或按钮的行索引?这是我的代码:

进口 cocoa

let data: [String] = ["Apple", "Microsoft", "IBM", "Tesla", "SpaceX", 
"Boeing" , "Nasa"]

class ViewController: NSViewController, NSTableViewDelegate,
NSTableViewDataSource {

override func viewDidLoad() {
super.viewDidLoad()

self.table.delegate = self
self.table.dataSource = self
self.table.reloadData()
// Do any additional setup after loading the view.
}
@IBOutlet weak var table: NSTableView!


@IBAction func CheckClicked(_ sender: Any) {
print(self.table.selectedRow)
}

override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}

func numberOfRows(in tableView: NSTableView) -> Int {
return data.count
}

func tableView(_ tableView: NSTableView, viewFor tableColumn:
NSTableColumn?, row: Int) -> NSView? {
if (tableColumn?.identifier)!.rawValue == "NameColumn"
{
if let cell = tableView.makeView(withIdentifier:
NSUserInterfaceItemIdentifier(rawValue: "NameColumn"), owner: self)
as? NSTableCellView
{
cell.textField?.stringValue = data[row]
return cell
}
}
else if (tableColumn?.identifier)!.rawValue == "CheckColumn"
{
if let cell = tableView.makeView(withIdentifier:
NSUserInterfaceItemIdentifier(rawValue: "CheckColumn"), owner: self)
as? NSButton
{

return cell
}
}
return nil
}

func tableViewSelectionDidChange(_ notification: Notification) {
print(self.table.selectedRow)
}

}

最佳答案

这就是您正在寻找的内容,但更好的实现是将操作与 NSTableCellView 子类一起使用。

   @IBAction func CheckClicked(_ sender: NSButton) {
// print(self.table.selectedRow)

let row = table.row(for: sender)
print("Button row \(row)")
}

关于Swift - 在 NSTableView 中使用复选框获取行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50997261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com