Я хочу заполнить мой NSTableView
контентом. В каждой ячейке таблицы 3 элемента (2 NSTextFields
и 1 NSImageView
). Для этого я создал пользовательский NSTableCellView
, в котором я хочу установить @IBOutlets
из 3 элементов, чтобы установить для них значение. Но когда я пытаюсь установить ссылочные выходы, единственный вариант - создать действие.
Когда я пытаюсь написать @IBOutlet weak var personName: NSTextfield
и затем установить ссылки, я не могу, потому что "xcode не может найти класс в текущем рабочем пространстве"
Когда я создаю NSTableView
внутри main.storyboard, я могу установить ссылки на розетки. Так в чем же различие между .storyboard и .xib?
Когда я пытаюсь соединить @IBOutlet с пунктом «Персона»
Мой NSViewController (владелец .xib)
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
@IBOutlet weak var tableView: NSTableView! //ref to tableView in xib
var persons:[Person] = [] //content to fill tableview
override func viewDidLoad() {
super.viewDidLoad()
persons.append(Person(name: "John", age: 23, piRef: "/Users/xy/Desktop/profilePic.png"))
persons.append(Person(name: "Marie", age: 26, piRef: "/Users/xy/Desktop/profilePic.png"))
tableView.delegate = self
tableView.dataSource = self
}
func numberOfRows(in tableView: NSTableView) -> Int {
return persons.count
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let tableCellView:personTableCell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "defaultRow"), owner: self) as! personTableCell
//NSTableColumn in xib has id "defaulRow"
if let person:Person = persons[row] {
tableCellView.setPerson(person: person) //call method inside NSTableCellView-subclass to set item values
}
return tableCellView
}
}
Пользовательский подкласс NSTableCellView ( "personTableCell" )
class personTableCell: NSTableCellView {
var person:Person! = nil
//here should be:
//@IBOutlet weak var personName: NSTextField!
//@IBOutlet weak var personAge: NSTextField!
//@IBOutlet weak var personImg: NSImageView!
func setPerson(person: Person) {
self.person = person
self.personName = person.name
self.personAge = person.age
self.personImg = NSImage(byReferencingFile: person.profileImgRef)
}
}
Я хочу иметь возможность добавлять ссылки на выпуск товаров в мой NSTableCellView-подкласс .