gpt4 book ai didi

arrays - 使用 Swift 的 NSButton 从 NSTableView 上的数组中删除数据

转载 作者:行者123 更新时间:2023-11-28 15:55:28 24 4
gpt4 key购买 nike

我有一个 NSTableView,其中的数据是从一个数组中填充的。

我创建了一个按钮,当点击它时应该从数组中的该行中删除项目。

我对如何从数组中删除数据并删除表列感到困惑?

我的数组引用是:

var messagesRef: Firebase!
var messages = [Message]()

func setupFirebase() {

messagesRef = Firebase(url: "https://url")


messagesRef.queryLimitedToLast(10).observeEventType(FEventType.ChildAdded, withBlock: { (snapshot) in
let text = snapshot.value["text"] as? String
let sender = snapshot.value["sender"] as? String
let imageUrl = snapshot.value["imageUrl"] as? String

let message = Message(text: text, sender: sender, imageUrl: imageUrl)
self.messages.append(message)
self.tableView.reloadData()


})
}

我的表委托(delegate)和数据源是:

func numberOfRowsInTableView(tableView: NSTableView) -> Int {
return self.messages.count
}

func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? {
let result = tableView.makeViewWithIdentifier("cell", owner: self) as? secondviewTableCell



let mess = messages[row]

result?.textField?.stringValue = mess.text()
result?.sendertextView.stringValue = mess.sender()

result?.removeButton.target = self
result?.removeButton.action = #selector(secondVC.removeFromScreen)



return result

}

func removeFromScreen(){


}

我已经设法删除了 TableView 中的行,但我仍在努力从数组中的行中删除数据。

这是我删除行的函数:

@IBAction func removetablerow(object: NSButton) {

let row = tableView.rowForView( object as NSView )
if ( row > -1 ) {
let indexSet = NSIndexSet( index:row )
tableView.removeRowsAtIndexes( indexSet, withAnimation: NSTableViewAnimationOptions.EffectFade )
NSTimer.scheduledTimerWithTimeInterval( 0.5, target: self, selector: #selector(secondVC.rowDeleted(_:)), userInfo: row, repeats: false )


}
}

最佳答案

在 macOS 中使用基于 View 的表格 View 非常容易。

  • 创建一个标准的 IBAction 并在 Interface Builder 中连接按钮。
  • 在操作中获取带有 row(for view: 的行并将 sender 作为 view 参数传递,例如

    @IBAction func removeFromScreen(_ sender : NSButton)
    {
    let row = self.tableView.row(for: sender)
    messages.remove(at:row)
    tableView.removeRows(at: IndexSet(integer:row), withAnimation:.effectFade)
    // do other things with the row
    }

没有额外的target,没有额外的action

编辑:

Swift 2 的等价物是:

    @IBAction func removeFromScreen(sender : NSButton)
{
let row = tableView.rowForView(object)
messages.removeAtIndex(row)
tableView.removeRowsAtIndexes( NSIndexSet( index:row ), withAnimation: NSTableViewAnimationOptions.EffectFade )
// do other things with the row
}

关于arrays - 使用 Swift 的 NSButton 从 NSTableView 上的数组中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813863/

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