Изменение свойств представления контейнера

У меня есть tabView, скажем, с 3 вкладками, каждый из tabViewItems содержит webView. Я хочу установить заголовок каждой вкладки как document.title HTML-страницы, которую отображает каждый webView.

Таким образом, у каждого NSTabViewItem есть Webview через [tabViewItem setView:webView];. Теперь, в didFinishLoadForFrame делегате веб-просмотров, я могу получить заголовок HTML-страницы, выполнив NSString *title = [sender stringByEvaluatingJavaScriptFromString:@"document.title"]. У меня есть доступ только к объекту sender, поэтому мой вопрос заключается в том, как я могу получить NSTabViewItem, содержащий моего отправителя. Другими словами, что я должен поместить внутрь < >s

[<getNSTabViewItemFromSender:sender> setLabel:title]

person jeanpaul62    schedule 16.05.2014    source источник


Ответы (2)


Вы можете получить родителя любого NSView с помощью отправив его -superview.

person jatoben    schedule 16.05.2014
comment
Ну, на самом деле здесь это не совсем родитель, потому что: 1) я сделал [tabViewItem setView:webView], поэтому tabViewItem не является супервизором моего веб-просмотра, и 2) супервизор возвращает объект NSView, и я хочу, чтобы это был NSTabViewItem. - person jeanpaul62; 16.05.2014

Поскольку ваш объект веб-представления настроен как представление для вкладки, вы можете найти элемент вкладки, который использует ваше конкретное веб-представление.

Вы можете реализовать это как категорию на NSTabView (что-то вроде этого)...

- (NSTabViewItem*)tabViewItemWithView:(NSView*)view {
    for (NSTabViewItem *item in [self tabViewItems]) {
        if (item.view == view) {
            return item;
        }
    }
    return nil;
}

Затем вы можете установить метку для элемента вкладки, содержащего ваше веб-представление.

[[tabView tabViewItemWithView:webView] setLabel:label];
person Jody Hagins    schedule 13.11.2014