Что такое NSBrowserTableView по сравнению с NSBrowser?

Я реализую -(void) метод delete: чтобы я мог обработать ключ удаления в моем приложении Какао. Я хочу, чтобы он делал разные вещи в зависимости от того, что выбрано: для текстовых полей я хочу поведение по умолчанию (убрать символ слева), но для элементов NSBrowser я хочу, чтобы он удалил элемент.

Я подумал, что спросить у Window его первого ответчика, а затем посмотреть, равен ли первый ответчик указателю для моего NSBrowser, но он никогда не совпадал. Когда я отлаживаю его, я обнаруживаю, что firstResponder указывает на экземпляр NSBrowserTableView, но я не могу найти это в документации.

Что это?

И как еще я могу проверить, является ли мой firstResponder определенным tableView? (Я думал о создании подкласса NSBrowser, но я склонен избегать создания подклассов, и моей второй мыслью было добавить тег, но мне больше всего нравится мой первый метод, если только firstResponder будет указывать на мой экземпляр NSBrowser, когда один из элементов в браузере выбрано.)

Мысли?

2 ответа

Решение

Вы не можете найти это в документации, потому что это личное. Я предполагаю, что, когда вы создаете экземпляр NSBrowser или NSTableView, вы фактически создаете экземпляр подкласса этого частного класса, который сам является подклассом NSControl (который указан в документации как суперкласс как NSBrowser, так и NSTableView). Другим примером является NSString, представленный как "NSCFString", который я принимаю как указание на тот факт, что CFString и NSString являются "бесплатными мостовыми соединениями".

Возьмите это с таким количеством зерен соли, сколько пожелаете, но я бы хотел получить представление о первом респонденте, вставив оператор NSLog в мой код и нарушив его, увидев, что было напечатано в журнале. Вы можете установить тег представления и отобразить его в операторе. Или вы можете попросить класс вашего первого респондента

NSStringFromClass([myFirstResponder class]) 

и отобразить это.

Надеюсь, это помогло.

На самом деле, @trudyscousin является только частично правильным. Этот класс определенно не является подклассом NSBrowser.

NSBrowserTableView - это частный подкласс NSTableView, используемый NSBrowser для отображения каждого столбца. Табличное представление используется, так что есть отдельное место для рисования изображения ветви (маленькая стрелка, нарисованная рядом с папками), в то время как остальная часть строки будет нарисована либо ячейкой по умолчанию, либо определенной пользователем.

Если вы подумаете об этом, то на самом деле имеет смысл, что табличное представление (а не браузер) будет первым респондентом, потому что тогда таблица для активного столбца в первую очередь реагирует на нажатия клавиш, и NSBrowser может позволить NSTableView делать то, что он уже делает. знает как (Например, переход к первой строке, которая соответствует букве, набранной пользователем.)

К счастью, NSBrowserTableView имеет указатель на браузер, для которого он работает. Вы можете получить доступ к этому через его -(NSBrowser*)browser метод. Я рекомендую вам не создавать подкласс NSBrowser для этого конкретного случая, так как вам нужно было бы глубоко знать его частную реализацию, чтобы сделать что-нибудь полезное.

Другие вопросы по тегам