2010-12-11 2 views
2

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

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

Что это?

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

Мысли?

ответ

-1

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

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

NSStringFromClass([myFirstResponder class]) 

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

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

4

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

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

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

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

+0

Если вы это сделали, Apple не позволит вам в App Store, потому что это недокументировано. – tbodt