Вопрос

Во-первых;Я ПОЛНЫЙ новичок в Cocoa, поэтому, пожалуйста, поблагодарите меня за то, что я задал вопрос, который, я уверен, является бессмысленным и совершенно новым.

Моя ситуация заключается в следующем:Я хочу подробнее рассказать о функциональности NSTextField.Среди вещей, которых я хочу достичь, есть:

Изменение внешнего вида каре.

Определяет, когда текст достигает определенного количества символов, а затем по-другому раскрашивает текст после этого предела.*

К моему великому разочарованию, потратив довольно много времени на поиск в Google, я нахожу сотни обращений, в которых просто указано "Вложить NSTextField и использовать этот код.", и, к моему унижению, я обнаружил, что не могу точно понять, как это сделать.

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


Я приношу свои глубочайшие извинения за свой поздний ответ!

Приношу свои извинения всем вам.У меня дома грудной ребенок с коликами, и, как вы (или, по крайней мере, те из вас, у кого есть дети), можете себе представить, это отнимает довольно много вашего свободного времени.Спасибо вам всем за ваши ответы.

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

Но хотя я вижу, что это будет незаменимым инструментом для меня, я по-прежнему получаю наибольшее понимание от изучения примеров, а не чтения теории *, и поэтому я был бы чрезвычайно признателен, если бы кто-нибудь создал проект с соответствующим подклассом соответствующего класса, поскольку я понимаю, что мне, вероятно, не следует расширять класс NSTextField?

Я бы сразу отметил сообщение Марка Талманса в качестве ответа, поскольку уверен, что это правильный ответ "для чайников", но я подожду несколько дней, так как мне бы очень хотелось просмотреть файл.Но я не неблагодарный!

О, и еще;Пожалуйста, поверьте мне, ребята, когда я говорю, что я не так уж бесполезен в языках, которые я на самом деле знаю.Просто эти концепции с построением интерфейса и подключением GUIS к коду мне очень неизвестны.Обычно я просто пишу код и оставляю все как есть.


* Да, мой первый небольшой обучающий проект действительно является утилитой Twitter.

* Как с ребенком

* Не то чтобы чтение теории не имело огромной ценности и для меня.Я бы не был там, где я есть, без Колина Мука "окончательное руководство по AS3"

Это было полезно?

Решение

Мартин,

Я начал с диалогового окна "Новый файл" и выбрал "Cocoa" слева, а затем Objective-C class.

Это сгенерирует следующий код, без комментариев.Затем все, что вам нужно сделать, это изменить NSObject в строке "@interface" заголовка на "NSTextView", и у вас будет рабочий подкласс.Если вы используете XCode 3.0, вы можете зайти в Interface Builder и изменить класс вашего NSTextField на "myTextView".

Вам также следует взять книгу Аарона Хиллегасса "Программирование Cocoa для Mac OS X, третье издание", она была обновлена для Leopard, если вы еще этого не сделали.

Удачи.


#import <Cocoa/Cocoa.h>


@interface MyTextView : NSTextView {
 // Outlets & Members go here
}
// Actions & messages go here
@end


#import "MyTextView.h"


@implementation MyTextView

@end

Другие советы

setInsertionPointColor: мы позаботимся о настройке цвета курсора, и использование методов делегирования было бы лучшим способом раскрасить текст после изменения количества символов.В общем, многие классы в Cocoa похожи на это;вы можете разделить их на подклассы, но большая часть функциональности, которую вам нужно изменить, находится в методах делегирования.

NSTextField является особенным, потому что на самом деле в нем не реализовано редактирование текста.Это делается общим (для каждого окна) NSTextView, известный как редактор полей.Вы можете предоставить специальный редактор полей для данного NSTextField.Канонически это делается путем создания подкласса NSWindow (!) и переопределяющий -fieldEditor:forObject:.Однако, когда я искал это, я нашел NSTextFieldCell’s -setUpFieldEditorAttributes: метод, который выглядит так, как будто он может возвращать другой редактор полей, чем тот, который ему передан.

Рекомендуемое чтение: Темы по управлению и программированию ячеек для Cocoa, Обзор текстовой системы.

  1. Если вам действительно нужно его подклассировать, вы должны подклассировать NSTextFieldCell.Информация о NSCells являются доступно онлайн.

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

  3. По крайней мере, цвет можно изменить с помощью NSTextFieldпривязки, используй их.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top