Что такое NSBrowserTableView по сравнению с NSBrowser? - PullRequest
2 голосов
/ 11 декабря 2010

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

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

Что это?

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

Мысли

Ответы [ 2 ]

4 голосов
/ 14 февраля 2011

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

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

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

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

0 голосов
/ 11 декабря 2010

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

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

NSStringFromClass([myFirstResponder class]) 

и отобразить его.

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

...