我有一个简单的TabView,使用NativeScript w / angular:
~/fabric-tools./startFabric.sh
我希望标签栏中的按钮不会更改视图,而是执行其他操作(例如打开模式对话框)。
我在<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>
内外尝试了新的<StackLayout>
。
我还尝试使用<TabView>
所有方法导致应用崩溃。
是否可以使用<AbsoluteLayout>.
捕获标签视图更改并阻止更改?
我在事件上尝试了selectedIndexChanged
,但收到了错误:
stopPropagation()
我尝试将视图更改回单击中间按钮时存在的视图,但是有一个明显的闪烁,因为视图必须在此事件被触发之前更改。可以接受的是像Property 'stopPropagation' does not exist on type 'SelectedIndexChangedEventData'.
这样的方法,但该方法不存在。
onSelectedIndexWill Change
或者是否有其他方法可以在标签栏中添加一个没有链接到新视图的按钮?
或者我应该不实现原生标签栏,而只是从头开始创建导航栏?
答案 0 :(得分:1)
对于NativeScript团队拒绝export the delegates这一事实,这不是你可以在这一点上修补的东西。执行此操作的唯一方法是分叉TabView代码并使用它创建自己的插件。
但是,一旦获得了分叉副本,进行此更改应该相当简单。你只需要在第64行public tabBarControllerShouldSelectViewController(tabBarController: UITabBarController, viewController: UIViewController): boolean {
附近
您只需要检测它正在尝试加载哪个viewController;然后在您不想实际更改视图的情况下返回false。 ; - )
两种可能的方式;
owner.selectedIndex
;我认为此时应指向适当的新指数; viewController
对所有者的视图控制器列表(即const selectedIndex = owner._ios.viewControllers.indexOfObject(viewController);
)