2017-10-11 9 views
-1

ボタンで奇妙な問題が発生しています。だから私はそれに多くのサブビューを持つNSViewControllerを持っています。ボタンをクリックすると、クリックジェスチャーとボタン付きの新しいNSViewが上に追加されます。しかし、私はそれらのいずれかを押すことはできません、彼らは2秒間クリックしてから解放しなければ反応しません。私は所有者のジェスチャーを無効にしようとしましたが、動作しませんでした。助言がありますか?swift mac osx NSButtonが長時間押すまで応答しない

+0

"NSViewControllerには多くのサブビューを持つNSViewControllerがあります。"それを見るのはあなただけです。私たちの残りの人はしません。 –

答えて

0

私たちの残りの部分は、私の場合は、シート上のビュー上のボタンのため、「多くのサブビュー」はそうではありません。シートのビューコントローラは約100行です。まだデバッグ中です...

現在、VCは次のとおりです。 snp.makeConstraints呼び出しは、Snapkit(GitHub製)用です。

@objc 
class ThreadEditSheetViewController: NSViewController { 

    /// The container for the graphics view 
    @IBOutlet var sheetView: NSView! 

    /// The information packet initialized by the invoking view controller 
    var info: ThreadEditInfo! 

    /// API 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    /// API 
    override func viewWillAppear() { 

     guard let gvc = (try? self.bundleLoader(id: "GraphicsViewController")) as? GraphicsViewController else { 
      fatalUserAlert(error: AppError.UIConstructionFailure, message: "Can't find GraphicsViewController for ThreadEditSheetViewController")} 
     let gv = gvc.view 
     self.view.addSubview(gv) 

     // Spaces in title text move it left to avoid visual overlap with scroll bar. Don't know how to do it with 
     // constraints given the scrolling view 
     let done = makeButton(gvc: gvc, title: "done  ", action: #selector(doneEditing(_:))) 
     done.snp.makeConstraints{ (make) in 
      make.top.equalTo(gv).offset(-5) 
      make.right.equalTo(gv).offset(-5) 
     } 

     let cancel = makeButton(gvc: gvc, title: "cancel", action: #selector(cancelEditing(_:))) 
     cancel.snp.makeConstraints{ (make) in 
      make.top.equalTo(gv).offset(-5) 
      make.left.equalTo(gv).offset(5) 
     } 

     self.view.becomeFirstResponder() 
     super.viewWillAppear() 
     return 

    } 

    func makeButton(gvc: NSViewController, title: String, action: Selector) -> NSButton { 
     let button = NSButton(title: title, target: self, action: action) 
     let gv = gvc.view 
     gv.addSubview(button) 
     button.backgroundColor = .clear 
     button.setButtonType(.momentaryChange) 
     button.isTransparent = true 
     return button 
    } 

    @objc 
    func doneEditing(_ sender: Any) { 
     self.dismissViewController(self) 
    } 

    @objc 
    func cancelEditing(_ sender: Any) { 
     self.dismissViewController(self) 
    } 

} 
関連する問題