-1

I am having a weird issue with a button. So I have a NSViewController with many subviews in it. When I click a button, a new NSView with click gestures and buttons is added on top. But I can't press any of them, they don't respond unless a click for 2 seconds and then release. I've tried disabling the gestures of the holder but it didn't work. Any suggestions?

Leo Dabus
  • 229,809
  • 59
  • 489
  • 571
Rafael Jimeno
  • 626
  • 2
  • 8
  • 20
  • "So I have a NSViewController with many subviews in it." It's only you who see it. The rest of us don't. – El Tomato Oct 11 '17 at 04:21

1 Answers1

0

Well, some of the rest of us do. In my case, it's for buttons on a view in a sheet, so "many subviews" isn't likely it. My view controller for the sheet is about 100 lines. Still debugging...

At present the VC is as follows. The snp.makeConstraints calls are for SnapKit (from 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)
    }

}
Feldur
  • 1,121
  • 9
  • 23