ios - NativeScript TabView 上的叠加按钮?

标签 ios objective-c angular nativescript

我有一个像这样使用带 Angular NativeScript 的简单 TabView:

<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>

我想要标签栏中的一个按钮,它不会改变 View ,而是做其他事情(比如打开模式对话框)。

我尝试了一个新的 <StackLayout> <TabView>内外.

我还尝试使用 <AbsoluteLayout>.所有方法都导致应用程序崩溃。

是否可以使用 selectedIndexChanged 捕获选项卡 View 更改?并阻止更改?

我试过了 stopPropagation()在事件上但出现错误: Property 'stopPropagation' does not exist on type 'SelectedIndexChangedEventData'.

我尝试将 View 更改回单击中间按钮时存在的 View ,但是有一个明显的闪烁,因为在触发此事件之前 View 必须更改。可以接受的是 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.
            });
        }
    }

或者是否有另一种方法可以在标签栏中加入一个不链接到新 View 的按钮?

或者我不应该实现原生标签栏,而是从头开始创建一个导航栏?

Here's how it can be done for ios.

Here is a sample app in NativeScript playground showing the issue. Click center link to see the flicker.

最佳答案

针对 NativeScript 团队拒绝 export the delegates 的事实这不是你可以猴子修补的东西。唯一的方法是 fork TabView代码并使用它创建您自己的插件。

但是,一旦您有了 fork 副本,进行此更改应该相当简单。你只需要在第 64 行左右 public tabBarControllerShouldSelectViewController(tabBarController: UITabBarController, viewController: UIViewController): boolean { 您只需要检测它正在尝试加载哪个 viewController;然后在您不想实际更改 View 的情况下返回 false。 ;-)

两种可能的方式;

  • 检查owner.selectedIndex;我相信此时它应该指向正确的新索引;
  • 然而,如果不是,则第二种可能的方法是根据所有者 View Controller 列表检查 viewController(即 const selectedIndex = owner._ios.viewControllers.indexOfObject(viewController); )

关于ios - NativeScript TabView 上的叠加按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49957956/

相关文章:

javascript - 创建一个自定义 Angular 原理图来生成以下划线开头的文件?

ios - 如何在我想要的时间执行部分代码?

ios - Xcode 5 iOS 应用程序未使用正确的产品名称作为构建 ID

objective-c - NSFetchedResultsController 更新和一对一关系的问题

ios - 如何查看iOS版本是iOS 6?

javascript - 如何从 Angular 中的 api 响应获取数据

android - 如何基于 Angular2 应用程序创建 Android 应用程序。

ios - 在 Apple Watch 的 "ExtensionDelegate"设置 rootInterfaceController

ios - CALayer 未渲染其 UIImage 内容

objective-c - NSStrings 是存储在堆上还是堆栈上,什么是初始化的好方法