2017-01-23 3 views
0

配列からデータを取り込んだNSTableViewがあります。SwiftでNSButtonを使用して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() 


    }) 
} 

と私のテーブルのデリゲートとデータソースは次のとおりです:

マイ配列の参照がある

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(){ 


    } 

私は、テーブルビュー内の行を削除するために管理してきましたが、私はまだ削除して苦労しています配列内の行からのデータこれは、ビューベースのテーブルビューを使用してMacOSの中には非常に簡単です

@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) 


    } 
} 

答えて

1

はここで行を削除するには、私の機能です。

  • 標準IBActionを作成し、Interface Builderでボタンを接続します。
  • row(for view:で行を取得し、senderviewパラメータとして渡すというアクションで、

    @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

編集:

スウィフト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 
    } 
+0

私はバック型の値のエラーを取得する「NSTableView」この答えとはメンバー「行」を持っていません。 –

+0

これはSwift 3コードです。あなたはSwift 2を使用しているようです。あなたは 'messages'配列からも項目を削除する必要があります。 – vadian

関連する問題