2012-04-10 3 views
0

Имеет ли кто-нибудь опыт встраивания редактора полей (для NSTextField) внутри прокрутки? Я пытаюсь сделать NSTextField прокручиваемым при редактировании.Внедрение редактора полей в NSScrollView

Что я пробовал:

  1. Динамически встраивать его, когда вызывается пользовательский редактор этого месторождения -becomeFirstResponder. Это полу работает; проблема заключается в том, что, когда NSTextField получает изменен во время редактирования пользовательского редактора поля больше не получает изменение размера с ним (и мне это нужно - сделать аккордеон приложение стиля)

  2. Создать «маскарадинг» редактора поля из NSScrollView , и использование NSInvocation пересылает методы в фактический редактор суррогатного поля. Это метод, который я действительно надеюсь, будет работать; Я реализовал все методы, перечисленные here; но я получаю EXC_BAD_ACCESS всякий раз, когда редактор полей фактически загружается (например, когда я звоню [customTextField selectText:nil]). Я не могу представить какую-либо информацию из отладчика даже с включенными Zombies, и просмотр журналов NSObjCMessageLoggingEnabled ничего не дает. Кажется, these guys заработал, но это было семь лет назад.

Крайнем будет полностью отказаться NSTextFields и использовать NSTextViews (или вместо того, чтобы полагаться на механизм редактирования поля, напишут себя), но так как у меня есть много строк данных из которых будут редактироваться только один в то время я не хочу создавать экземпляр NSTextView для каждого из них ... но тогда, возможно, это будет не так уж плохо.

ответ

0

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

В моем настраиваемом редакторе полей теперь содержится ссылка на (пользовательский) вид прокрутки для встраивания себя в (vvScrollView) и вставляет его в иерархию представлений. Мой код в моем редакторе настраиваемого поля (NSTextView) для встраивания его в целях прокрутки, которая называется, как только редактор поля становится первым ответчиком и автоматически вставляется в иерархию представления:

- (void)embedSelfInScrollView { 
    NSView *realSuperview = [[self superview] superview]; 
    // [self superview] is some kind of private NSClipView class 
    if ([realSuperview isKindOfClass:[NSTextField class]]) { // the expected behavior: this may change? TODO make less prone to chance 
     [realSuperview addSubview:[self vvScrollView]]; // insert into view 
     [[self vvScrollView] setFrameSize:[realSuperview frame].size]; // se the initial size equivalent to control size so it can autoresize the same way 
     // add the scrollview into the view hierarchy 
     [[self vvScrollView] setDocumentView:self]; // removes self from previous superview 
    } 
} 

Исходная задача I было то, что я пытался вставить scrollview в супервизор сразу над редактором поля (частный класс NSClipView), который разбил почти каждый автоматический параметр размера (потому что я хочу иметь возможность изменять размер NSTextField при редактировании). Дальнейшее продвижение и обход частного класса, похоже, работает, но почти кажется произвольным.

Смежные вопросы