Кнопка Overlay на вкладке NativeScript TabView?

lilbiscuit спросил: 28 марта 2018 в 02:58 в: ios

У меня есть простой TabView, подобный этому, используя NativeScript w / angle:

<TabView [(ngModel)]="tabSelectedIndex" height="300px" (selectedIndexChanged)="onSelectedIndexChanged($event)">
     <StackLayout *tabItem="{title: 'Tab 1'}">
         <Label text="Content in Tab 1"></Label>
    </StackLayout>
     <StackLayout *tabItem="{title: 'Button 1'}">
         <!-- these won't be content here because clicking this should not change to a another tab, but instead should do something else. -->
    </StackLayout>
    <StackLayout *tabItem="{title: 'Tab 2'}">
        <Label text="Content in Tab 2"></Label>
        </StackLayout>
</TabView>

Я хочу кнопку на панели вкладок, которая не меняет вид, но вместо этого делает что-то else (например, открыть модальный диалог).

Я попробовал новый <StackLayout> как внутри, так и снаружи <TabView>.

Я также попробовал использовать <AbsoluteLayout>. Все методы, вызвавшие сбой приложения.

Можно ли зафиксировать изменение вида вкладок с помощью selectedIndexChanged и предотвратить изменение?

Я пробовал stopPropagation() в событии, но получил ошибку: Property 'stopPropagation' does not exist on type 'SelectedIndexChangedEventData'.

Я попытался изменить представление назад к представлению, которое существовало, когда средняя кнопка была но есть заметное мерцание, потому что представление должно измениться до того, как это событие будет даже запущено. Что было бы приемлемо, это что-то вроде onSelectedIndexWill Change, но этот метод не существует.

 onSelectedIndexChanged(args: SelectedIndexChangedEventData) {
        if (args.newIndex === 1) { //the middle button
            setTimeout(() => {
                tabView.selectedIndex = args.oldIndex; //go back to the previous view (causes flicker)
                //do stuff for the button click.
            });
        }
    }

Или есть другой способ включить кнопку на панели вкладок, не ссылается на новое представление?

Или я не должен реализовывать собственную панель вкладок и вместо этого просто создавать панель навигации с нуля?

Вот как это можно сделать для ios.

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


1 ответ

Есть решение
Nathanael ответил: 06 мая 2018 в 03:16

Примите во внимание тот факт, что команда NativeScript отказалась экспортировать делегатов, это не то, что вы можете использовать в данный момент. Единственный способ сделать это - раскрутить код TabView и создать свой собственный плагин, используя его.

Однако сделать это изменение должно быть довольно просто, если у вас есть раздвоенная копия. Вам просто нужно около строки 64 public tabBarControllerShouldSelectViewController(tabBarController: UITabBarController, viewController: UIViewController): boolean { Вам просто нужно определить, какой viewController он пытается загрузить; а затем верните false в случае, если вы не хотите фактически изменять вид. ; -)

Два возможных способа;

  • проверьте owner.selectedIndex; Я полагаю, что в этот момент он должен указывать на правильный новый индекс;
  • однако, если это не так, то вторым возможным способом будет проверка viewController по списку владельцев viewcontroller (то есть const selectedIndex = owner._ios.viewControllers.indexOfObject(viewController);)
  • уль>