2013-05-23 6 views
4

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

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

As I type A

Я прокручивать его

enter image description here

Некоторые более прокрутки, и она опускалась ниже видимой области.

enter image description here

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

Это нормально в Mail приложение, оно работает нормально.

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

  1. Создал NSTokenField.

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

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

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

Даже sample code from apple documentation ведет себя неправильно.

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

+0

Вы пытались установить 'selectionIndex' на' -1' или значение между 1-3? – gaige

+0

@gaige: как это приведет к тому, что он вернется в исходное положение? selectionIndex выберет значения массива. –

+0

Как вы прокручиваете его?И в каком направлении вы прокрутили, чтобы получить каждое изображение, которое вы показываете? –

ответ

0

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

F-Scripting FTW

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

+1

Я согласился с вашим Mail.app с помощью ** Accessibility Inspector **, а также с ** RAFT **. Мне понравился ответ, но проблема NSTokenField существует ... поднял для этого радар. –

0

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

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

-(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]]; 
} 

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

+0

Пожалуйста, прочтите мой вопрос снова yaar. Ответ на CodaFi хорошо объясняет, но он предложил использовать MMTokenField, чего я не могу. Мне нужно что-то, что будет настраивать существующий NSTokenField с пружинами. –

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

  • Нет связанных вопросов^_^