2016-07-09 12 views
0

enter image description here
MyTextFieldCellを呼び出すNSTextFieldCellをサブクラス化しました。 NSButtonCellを追加します。
誰でも知っていますか、NSButttonCellをMytextFieldCellでクリック可能にする方法はありますか?SwiftのNSTextFieldCellでクリック可能なNSButtonCell

コード:

class MyTextFieldCell: NSTextFieldCell { 

    var checkButtonCell: NSButtonCell 

    required init?(coder aDecoder: NSCoder) { 

     let cell = NSButtonCell() 
     cell.bezelStyle = .ThickerSquareBezelStyle 
     cell.setButtonType(.SwitchButton) 
     cell.title = nil 
     self.checkButtonCell = cell 

     super.init(coder: aDecoder) 
    } 

    override func drawWithFrame(cellFrame: NSRect, inView controlView: NSView) { 

     var checkRect = NSRect() 
     var textRect = NSRect() 
     NSDivideRect(cellFrame, &checkRect, &textRect, 21.0, NSRectEdge.MaxX) 

     super.drawWithFrame(cellFrame, inView: controlView) 
     self.checkButtonCell.drawWithFrame(checkRect, inView: controlView) 
    } 
} 
+0

最新のビューベースのテーブルビューを使用します。物事がずっと楽になります。 – vadian

+0

NSButtonCellにはターゲットとアクションがありますか? – Willeke

答えて

0

あなたは、セル内のボタンを作り、私はセルを防ぐためにで開始するセルのクラスのawakeFromNib()の内部

selectionStyle = .None

をやってreccommendユーザーがボタンをクリックしようとしているときにクリックしていると思うから...

override func awakeFromNib() { 
    super.awakeFromNib() 
    selectionStyle = .None 
} 

ボタンへのコンセントをButtonクラスで作成します。ボタンへのアクションを処理する最も簡単な方法は、セルの代わりにViewControllerクラスの内部に作成することです。それをセル内で作成し、デリゲートを使用してviewControllerと通信することは可能ですが、最も簡単な方法はViewController自体に@IBActionを作成することです。 @IBOutletはCellのクラスになければならないが、そこに作成するのは完全に大声である。あなたには、いくつかの方法でボタンを変更する必要がある場合はその後、テーブルビューのcellForRowAtIndexPathの内側にそれを変更して、変更が起こるのを見たいと変更が以前に行われた時点で

tableView.reloadRowsAtIndexPaths(NSIndexPath(forRow: theCellRow, inSection: theCellSection), withRowAnimation: UITableViewRowAnimation.None)

を呼び出します。私はこれが助けて欲しい! ;)

+0

ありがとうSethmr、しかしNSTableViewのためではありません – CocoaUser

+0

ああ、私の悪い...同じ原則がまだ適用されます。コンセントを定義したクラスにローカルにし、View Controllerのアクションをセルに対応させます。 – Sethmr

関連する問題