2016-12-29 4 views
0

Уважаемые разработчики SAPUI5,Как выделить выбранную вкладку в sap.m.IconTabBar?

У меня есть sap.m.IconTabBar, и я устанавливаю активную вкладку по коду, когда пользователь переключается между страницами. Я использовал следующий код:

sap.ui.getCore().byId(this.createId("iconTabBar")).setSelectedKey("1"); 

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

Пожалуйста, смотрите на следующих рисунках:

Что показывает, когда я выбираю первую вкладку с помощью кода:

enter image description here

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

enter image description here

+0

@Mehdi: this.createId() создаст новый идентификатор для вашего iconTabBar. Можете ли вы вставить свой код обзора и контроллера? –

+0

Я думаю, что вам нужно только запустить событие выбора (не проверено) после установки выделения [sap.ui.getCore(). ById (this.createId ("iconTabBar")). FireSelect();] –

+0

@RahulBhardwaj только часть моего кода, связанная с выбором вкладки, - это строка кода. Ваш комментарий правильный, но не имеет отношения к моему вопросу. –

ответ

1

Как @Ash сказал в ком вам нужно позвонить fireSelect, но это работает, только если пользователь сначала добавит вторую вкладку. Если пользователь находится на первой вкладке и переключается между страницами, то fireSelect не действует должным образом. Таким образом, вам нужно сначала выбрать вторую вкладку, тогда она будет работать почти все время.

sap.ui.getCore().byId(this.createId("iconTabBar")).setSelectedKey("2"); 
sap.ui.getCore().byId(this.createId("iconTabBar")).setSelectedKey("1"); 
sap.ui.getCore().byId(this.createId("iconTabBar")).fireSelect(); 
+0

Спасибо @Majid. Он работает нормально. –

1

Ok Я посмотрел в исходный код IconTabBar и Тереза ​​что-то я действительно не понимаю, почему, но вот как это происходит:

при вызове IconTabBar.setSelectedKey (ключ), он вызывает IconTabHeader. setSelectedKey (ключ)

затем внутренне IconTabBarHeader называет setSelectedItem (пункт, правда)

«истинное» здесь важно, параметр называется «bAPIchange» в функции setSelectedItem, и он используется в качестве условия ель eSelect():

if (!bAPIchange) { 
    // fire event on iconTabBar 
    if (bIsParentIconTabBar) { 
     oParent.fireSelect({ 
      selectedItem: this.oSelectedItem, 
      selectedKey: sSelectedKey, 
      item: this.oSelectedItem, 
      key: sSelectedKey 
     }); 
    } else { 
     // fire event on header 
     this.fireSelect({ 
      selectedItem: this.oSelectedItem, 
      selectedKey: sSelectedKey, 
      item: this.oSelectedItem, 
      key: sSelectedKey 
     }); 
    } 
} 

Это объясняет, почему событие не обжигают в вашем случае

+0

Дорогой @ Аш, да, это хорошо. Но он просто запускает функцию «Выбрать». Он работает, когда пользователь сначала выбирает вторую вкладку, а затем пытается переключаться между элементами. В этом случае, когда выбрана первая вкладка, и пользователь переключается между пунктами, он не окрашивает значок. Таким образом, я думаю, что ответ Маджида более эффективен. Но ваш ответ также хорошо знать. –

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