Как мне сохранить NSPathControl обновленным путем пути выбранной ячейки в NSBrowser - PullRequest
5 голосов
/ 10 декабря 2008

Мне нужно обновлять NSPathControl с выбранным в данный момент путем в NSBrowser, но у меня возникают проблемы с поиском способа получения уведомлений, когда путь изменился из NSBrowser. Идеальный способ сделать это - просто наблюдать путь ключа пути в NSBrowser, но это дает KVO возможность наблюдать только набор <key> методов, которые возвращают пустое сообщение и не обновляют (setPath возвращает значение успешного завершения bool).

Я также пытался наблюдать путь к выбранной ячейке, но я не получаю уведомлений, когда выбор там меняется.

Есть ли какой-то другой очевидный способ сделать это, которого мне не хватает?

Ответы [ 3 ]

7 голосов
/ 10 декабря 2008

Предоставлено Робом Кенигером в Какао Дев :

Вы смотрели на SimpleBrowser пример в / Developer / Примеры? Это показывает, как получить текущий выбор когда он изменяется пользователем, в основном просто установив действие NSBrowser.

Это действительно способ сделать это. Просто реализуйте - (void) broswerClicked: метод (включая отображение его в конструкторе интерфейсов) с тем, что вы хотите, чтобы происходило каждый раз, когда выбор изменяется внутри этого метода, например

- (void)browserClicked:(id)browser {
    self.pathToSelectedCell = [browser path]; // NSPathControl is bound to pathToSelectedCell
}
0 голосов
/ 06 марта 2013

Начиная с 10.6, можно узнать, какие элементы выбраны, используя обратный вызов делегата следующим образом:

- (NSIndexSet *)browser:(NSBrowser *)browser selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes inColumn:(NSInteger)column
{
    NSLog(@"New first item of the new selection is at index %@", [proposedSelectionIndexes firstIndex]);
    // Do something with the selected index or indicies
    return proposedSelectionIndexes; // Allow the selection to occur by not changing this
}
0 голосов
/ 10 декабря 2008

Я только что проверил в IB, и похоже, что NSBrowser имеет привязку путей индекса выбора (массив объектов NSIndexPath), которые вы могли бы отслеживать с помощью KVO. Это странно, но я не вижу упоминаний об этом в документации, поэтому вам может потребоваться провести небольшое исследование, чтобы выяснить, следует ли вам это использовать или не использовать, даже если кажется, что это работает. Если это так, в вашем методе наблюдения KVO вы найдете текущий путь браузера и преобразуете его в NSURL, который может использовать элемент управления пути.

Если это не работает, есть также методы делегата - (BOOL)browser:(NSBrowser *)sender selectRow:(NSInteger)row inColumn:(NSInteger)column и - (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(NSInteger)column.

...