закрыть nspopover не работает

у меня большая проблема, которую не могу решить уже неделю. Моя ситуация:

У меня есть ViewController с NSTableview и пользовательскими ячейками. в каждой продаже есть nsbutton. если вы нажали кнопку, появится nspopover. но вы можете закрыть его с помощью кнопки «закрыть», которая назначена на функцию закрытия. Если вы нажали кнопку «плюс» (вне таблицы), появится то же всплывающее окно, которое можно закрыть с помощью кнопки «закрыть» без проблем.

что я не так? я прикрепил пример проекта через гугл диск. Спасибо за вашу помощь:

Скачать: https://drive.google.com/open?id=0B8PBtMQt9GdORUxQRXRISWR5dWs


person Ghost108    schedule 02.07.2017    source источник
comment
NSTableViewController? И в чем проблема?   -  person Willeke    schedule 03.07.2017
comment
сори неправильное объяснение. Контроллер представления с включенным NSTableView. Мою проблему можно прочитать в первом посте.   -  person Ghost108    schedule 03.07.2017
comment
При нажатии на кнопку всплывающее окно появляется, а при нажатии кнопки закрытия всплывающее окно исчезает без проблем?   -  person Willeke    schedule 03.07.2017
comment
пожалуйста, скачайте пример - вы сразу увидите проблему   -  person Ghost108    schedule 03.07.2017
comment
Ага, всплывающее окно не закрывается само по себе, когда вы нажимаете другую кнопку. См. раскадровки OS X: использование «показать» переход, не позволяя отображать дубликаты новых окон? и Переход к другому контроллеру представления в iOS при нажатии кнопки.   -  person Willeke    schedule 03.07.2017
comment
извините, но я думаю, что вы не понимаете проблемы. и я не знаю, как я могу объяснить это лучше, как в посте 1   -  person Ghost108    schedule 03.07.2017
comment
Вот как я прочитал ваш вопрос: есть табличное представление с кнопкой в ​​каждой ячейке. Кнопка вызывает всплывающее окно, которое можно закрыть, нажав кнопку закрытия. Также есть кнопка «плюс», которая вызывает такое же всплывающее окно. Какая часть не работает?   -  person Willeke    schedule 03.07.2017
comment
кнопка в ячейке не может закрыть всплывающее окно с помощью кнопки закрытия. это проблема   -  person Ghost108    schedule 03.07.2017
comment
Кнопка в ячейке использует кнопку закрытия, чтобы закрыть всплывающее окно? Я думаю, что знаю, что вы имеете в виду, и я напишу ответ.   -  person Willeke    schedule 03.07.2017


Ответы (1)


dismissViewController не работает, если у контроллера представления нет контроллера представления (я не знаю, почему). Начиная со скачанного проекта, внесите следующие изменения:

  1. Переместите действие showPopover с CustomCell на TableViewController. Измените тип sender на NSButton.

  2. Представьте контроллер представления вместо отображения всплывающего окна.

    @IBAction func showPopover(_ sender: NSButton) {
        let vcPopover = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "vcPopover") as! NSViewController
        self.presentViewController(vcPopover, asPopoverRelativeTo : sender.bounds, of : sender, preferredEdge: .maxX, behavior: .transient)
    }
    
  3. Соедините действие кнопки в табличном представлении с контроллером табличного представления и действием showPopover.

person Willeke    schedule 03.07.2017
comment
я делаю все шаги до шага 2. но к шагу 3 у меня проблема. я должен подключить кнопку ячейки моего табличного представления с функцией showPopover? - person Ghost108; 03.07.2017