Обработка изменения выбранного сегмента NSSegmentedControl в Cocoa

Простите за супернубский вопрос, но я гуглю это в течение последнего часа и расстраиваюсь, что не могу найти ответ на такой очень простой вопрос:

Как мне обрабатывать изменения управления в Cocoa?

Я исхожу из iOS, и ясно, что Cocoa не использует выходы или делегаты для обработки событий так же, как это делает UIKit, и я чувствую, что мне здесь просто не хватает какой-то очень важной информации. Я понял, что он использует цепочку первого ответчика, но помимо этого я не могу понять, как это сделать на самом деле или как даже найти, где эти события определены или задокументированы.

Итак, у меня есть NSSegmentedControl внутри NSToolBar, и я просто хочу знать, когда пользователь меняет выбранный сегмент. Я просмотрел документацию класса, но не нашел ни одного упоминания о каких-либо событиях или действиях, которые нужно обрабатывать. Я заметил, что если я перетаскиваю выход action элемента управления на свой прокси-сервер первого ответчика, я получаю список из квадриллиона различных действий, ни одно из которых не кажется уместным.

Как же мне сделать это в Cocoa?


person devios1    schedule 18.04.2017    source источник
comment
Связанное действие с IBAction работает так же, как и в iOS. Очень умный способ, которого нет в iOS, — это Cocoa Bindings.   -  person vadian    schedule 18.04.2017
comment
Где я могу найти эти действия? Я посмотрел на крепления, но это выглядит как супер перебор. Мне просто нужен сигнал или вызов метода или что-то в этом роде.   -  person devios1    schedule 18.04.2017
comment
Создайте IBAction в целевом классе и подключите действие в Interface Builder (это то же самое, что и в iOS). Привязки не являются излишеством, это далеко не так. В большинстве случаев это меньше кода.   -  person vadian    schedule 18.04.2017
comment
Спасибо @vadian, я перетащил выход action в свой класс, и он создал общий выход действия, который действительно вызывается при изменении сегмента. Наверное, я искал что-то более конкретное.   -  person devios1    schedule 18.04.2017
comment
NSSegmentedControl имеет свойство .selectedSegment: Int.   -  person mikeD    schedule 18.04.2017
comment
Может быть, попробуйте это: нарисовать сегментированный элемент управления с синим оттенком, например xcode"> stackoverflow.com/questions/24927874/   -  person l'L'l    schedule 19.04.2017


Ответы (1)


Это код из одного из моих проектов

var currntSeg : Int = 1
@IBOutlet weak var acSwitch: NSSegmentedControl!
@IBAction func SwitchButton(_ sender: AnyObject) {
    switch acSwitch.selectedSegment {
    case 0:
        currntSeg == 0 ?
            self.navVC?.pushViewController(Sleeper!, animated: true) :
            self.navVC?.popViewController(Sleeper!, animated: true)
    case 1:
        currntSeg < 1 ?
            self.navVC?.pushViewController(Work!, animated: true) :
            self.navVC?.popViewController(Work!, animated: true)
    case 2:
        currntSeg < 2 ?
            self.navVC?.pushViewController(Student!, animated: true) :
            self.navVC?.popViewController(Student!, animated: true)
    default:
        self.navVC?.pushViewController(Rose!, animated: true)
    }
    currntSeg = acSwitch.selectedSegment
    print("Selected Seg: \(acSwitch.selectedSegment)")
}
person styl3r    schedule 07.05.2017
comment
acSwitch.selectedSegment содержит значение выбранного сегмента SwitchButton(_ sender: AnyObject) также является IBAction, связанным с сегментом. - person styl3r; 07.05.2017