How to set focus to an NSButton?

女生的网名这么多〃 提交于 2019-12-10 20:11:58

问题


I'm writing a small menubar application for OS X Yosemite. When clicking on the menubar icon, a popover appears with a number of recessed buttons. Like so:

As you can see, the "d4" button is focused, even though the d20 is selected by default. Clicking on any other button does not change the focus from the "d4" button. The only way to move the focus ring is via the Tab key.

Here is my code from the popover view controller:

import Cocoa

class DiceRollerViewController: NSViewController {

    var result: Int = 0

    var currentNumberOfSides = 20

    @IBOutlet weak var rollButton: NSButton!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func sidesButtonSelected(sender: NSButton?) {
        for view in self.view.subviews as [NSView] {
            if let btn = view as? NSButton {
                if btn.tag == 1 {
                    if btn != sender {
                        btn.state = 0
                    }
                    else {
                        btn.state = 1
                    }
                }
            }
        }
    }

    @IBAction func rollDice(sender: AnyObject?) {
        willChangeValueForKey("result")
        result = DiceRoller.rollDice(numberOfRolls: 1, numberOfSides: 20)
        didChangeValueForKey("result")
    }

}

And the relevant AppDelegate code:

func showPopover(sender: AnyObject?) {
        if let button = statusItem.button {
            popover.showRelativeToRect(button.bounds, ofView: button, preferredEdge: NSRectEdge.MinY)
        }
    }

To summarize, I'm trying to get rid of the focus ring that appears automatically when clicking on the popover. However, I don't want to remove the ability to focus via tab for accessibility reasons.


回答1:


Try overriding viewWillAppear() to make the "Roll!" button the first responder by doing:

if theRollButton.acceptsFirstResponder {
    self.view.window.makeFirstResponder(theRollButton)
}


来源:https://stackoverflow.com/questions/31867098/how-to-set-focus-to-an-nsbutton

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!