Список выбора NSTokenField показывает пустое пространство при прокрутке

При использовании NSTokenField происходит что-то странное, как показано на изображениях ниже:

Когда я набираю A, отображается выбор из всплывающего окна.

Когда я набираю A

я прокрутил это

введите здесь описание изображения

Еще немного прокрутки, и он ушел ниже видимой области.

введите здесь описание изображения

Это поведение со всеми табличными представлениями. Вид за рядами виден, но он автоматически возвращается в нормальное положение. Но не в этом случае.

В приложении Почта все в порядке, оно работает нормально.

Моя реализация:

  1. Создал NSTokenField.

  2. Установите его делегата в AppDelegate.

  3. В файле реализации

     -(NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex{
        return @[@"A",@"B",@"C"];
    }
    

Даже пример код из документации Apple ведет себя неправильно.

Как я могу сделать его автоматическим или ограничить каким-либо кодом?


person Anoop Vaidya    schedule 23.05.2013    source источник
comment
Вы пытались установить selectionIndex на -1 или значение между 1-3?   -  person gaige    schedule 23.05.2013
comment
@gaige: как это заставит его вернуться в исходное положение? selectionIndex выберет значения массива.   -  person Anoop Vaidya    schedule 23.05.2013
comment
Как ты его прокручиваешь? И в каком направлении вы прокручивали, чтобы получить каждое из изображений, которые вы показываете?   -  person Steve Waddicor    schedule 23.05.2013
comment
как вверх, так и вниз.... вы можете создать проект и попробовать это   -  person Anoop Vaidya    schedule 23.05.2013


Ответы (2)


То, что вы видите в Mail.app, не является настоящим NSMenu (обман Apple, шок!). Оказывается, на самом деле это пользовательский NSTextField, связанный с NSTableView, застрявшим в прозрачном окне.

F-Scripting FTW

Это довольно старый трюк, чтобы обойти чрезвычайно плохую версию scrollWheel: NSMenu, которая реализована. MTTokenField — это зрелая альтернатива тому, чтобы рвать на себе волосы, пытаясь вставить вид прокрутки в NSMenu.

person CodaFi    schedule 27.05.2013
comment
Я согласовал ваше Mail.app с Инспектором специальных возможностей, а также с RAFT. Мне понравился ответ, но проблема NSTokenField все еще существует .... поднял радар для этого. - person Anoop Vaidya; 31.05.2013

Вам нужно указать подстроку с содержимым массива. Это перечислит вам точные совпадающие записи (это плюс). Во-вторых, это позволит вам избежать прокрутки.

Вы должны изменить метод делегата следующим образом, чтобы решить проблему.

-(NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex
{
    NSArray *arrayContents = @[@"A",@"B",@"C"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", substring];
    return [NSArray arrayWithArray:[arrayContents filteredArrayUsingPredicate:predicate]];
}

Надеюсь, что это поможет вам.

person Abdul Naveed    schedule 30.05.2013
comment
Пожалуйста, прочитайте мой вопрос еще раз, yaar. Ответ CodaFi хорошо объясняет, но он предложил использовать MMTokenField, чего я не могу. Мне нужно что-то, что настроит существующий NSTokenField с пружинами. - person Anoop Vaidya; 30.05.2013