问题标签 [nstabviewcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
245 浏览

swift - 如何在 Swift 4 中为 NSTabViewController 创建自定义导航栏

我在 Swift 4 中开发一个 osx 应用程序以显示在菜单栏中,并在单击时调用一个弹出窗口以显示许多不同的视图。

我在 Storyboard 中的结构是: NSView > Container View > Tab View

这让我可以在能够在选项卡之间切换的同时维护一个顶部菜单栏。

我隐藏了 NSTabView 中的按钮,并设法使用以下代码在加载视图之间进行更改:

当我启动我的应用程序时,它会以编程方式加载第三个选项卡,这很棒!

然而,我想要做的是在父 ViewController 中创建我自己的菜单来调用这个函数,以便标签在容器中发生变化。

是否可以以某种方式从父级调用此函数?

我已经到处寻找解决这个问题的方法,并且非常接近,但希望这里有人可以帮助我。如果不够清楚,我可以添加我的故事板的图片吗?

提前致谢。

0 投票
4 回答
380 浏览

swift - macOS NSTabViewController 居中的选项卡图标

我有一个我创建的 macOS 应用程序。而且我有一个使用 swift & storyboard 构建的首选项窗口,该窗口带有一个样式为 NSTabViewController 的表格工具栏。

我认为没有办法覆盖选项卡图标的位置 - 它们默认位于窗口的左侧。可能吗?

在此处输入图像描述

0 投票
0 回答
38 浏览

cocoa - 为什么 viewDidLoad() 函数在我的 NSTabViewController 的每个 NSViewController 中运行?

在启动时,我的 macOS 应用程序会显示一个 NSTabViewController,其中包含大约 10 个选项卡。我注意到 viewDidLoad() 函数在启动时在所有这些视图控制器中运行。

但苹果文档说:

选项卡视图控制器延迟加载与每个子视图控制器关联的视图,仅在选择相应选项卡后创建它们。首次显示选项卡视图控制器的视图时,仅加载最初选择的选项卡的视图。

这样,只有第一个(选定的)视图控制器应该调用 viewDidLoad()。那么为什么所有子视图控制器的 viewDidLoad() 都会在启动时被调用?

自然,如果我在所有选项卡中将 viewDidLoad() 替换为 viewWillAppear() 函数,它们只会在切换到特定选项卡时被调用。

一件具体的事情是我使用 Realm,并且每个子视图控制器中都有“import RealmSwift”。这可能是一个原因吗?

0 投票
1 回答
238 浏览

ios - 如何从另一个视图(swift 4)对选项卡栏控制器中的特定视图执行 performSegue

在我的 iOS 应用程序中,在viewController中,我尝试在Tab Bar Controller中打开特定视图。
我使用 performSegue。
首先,我尝试直接导航到特定视图,但在这种情况下,标签栏消失了
所以我尝试导航到 tabViewController,这导致我进入默认视图(第一个)

知道如何导航到 TabBarController 中的特定视图吗?

我使用的 performSegue:

我用 swift 4

0 投票
2 回答
154 浏览

macos - 如何从可恢复的 NSWindow 中排除某些 AppKit 视图?

可以制作 NSWindows,restorable以便在应用程序启动之间保留它们的配置。

https://developer.apple.com/documentation/appkit/nswindow/1526255-restorable

应在启动周期之间保留 Windows,以保持用户界面的连续性。在随后的启动周期中,系统会尝试重新创建窗口并将其配置恢复到保留状态。配置数据根据需要更新并由系统自动保存。

在一个新的 macOS 项目中,Storyboard 上的 NSWindowrestorable默认为:

Xcode 中的可恢复复选框


我的问题是在 NSWindow 中嵌入 NSTabViewController 时出现的。

NSTabViewController

NSTabViewrestorable自动继承窗口的状态,无需添加代码。

这使得选定的选项卡在应用程序启动之间保持不变。我不想要那个。我希望它始终默认为索引 0。如果所选选项卡已恢复,尝试以编程方式选择选项卡会viewDidLoad产生意外结果。


如何强制将某些 AppKit UI 元素从 NSWindow 状态恢复中排除?

我希望选项卡视图不可恢复。

但我保留其他可恢复的好处,例如恢复之前设置的窗口大小。

如何从 NSWindow 状态恢复中排除单个视图?

0 投票
1 回答
36 浏览

xcode - 选项卡视图控制器窗口大小卡住

每当我实现选项卡视图控制器时,窗口大小似乎都停留在相同的配置中,即使我更改了所有窗口和视图控制器的大小值。 例如,所有这些都是 300x100 但这总是显示的

0 投票
1 回答
203 浏览

swift - 如何在 NSTabViewController 中禁用延迟加载?

我正在为 NSTabViewController 设计一个带有工具栏样式的 SwiftUI 包装器。我希望它成为 TabView 的替代品。TabView 使用修饰符tabItem(_:)来指定选项卡名称和图标。所以我为自己设计了一个类似的修饰符ToolbarTabView

我将每个包装View在 a 中NSHostingController并创建一个NSTabViewItem. 然后我onPreferenceChange用来设置NSTabViewItem'slabelimage属性。最后,我必须NSViewControllerRepresentable将我的数组传递NSTabViewItemNSTabViewController. 除了以下问题外,这一切都很好。

按照设计NSTabViewController,只会加载其第一个选项卡。这加载了第NSHostingController一个布局的第一个View。这调用onPreferenceChange并设置了label第一个选项卡。但是,其余选项卡未加载,因此label未设置。

我知道我可以重新设计我的 API 以明确地传递标签和图像并且这很有效,但是 Apple 是如何实现它们的TabView呢?由于 macOS 的实现TabView看起来像NSTabViewController.

我认为一种解决方法是强制加载所有选项卡,这是这个问题的标题,但我也对其他想法持开放态度。

参考:

https://github.com/utmapp/UTM/blob/dev/Platform/macOS/ToolbarTabView.swift

https://github.com/utmapp/UTM/blob/dev/Platform/macOS/ToolbarTabViewController.swift

0 投票
0 回答
19 浏览

xcode - TabViewController : 使子视图居中 & 设置背景

我有一个 SplitviewController,它的右侧嵌入了一个 tabViewController。左呼吸暂停内的 3 个按钮用于显示 3 个不同的窗口。

第一个问题:Windows 2 和 3 出现某种灰色背景,但不是第一个,我不知道如何摆脱它

窗口 1

窗口 2

设计师

第二个问题:我不知道如何在 TabView 中将窗口的视图居中(在上图中,您可以看到尽管在设计器中居中,但标签并未显示在右侧面板的中心)。

编辑:第二个问题解决了。我仍然不知道如何删除背景。

0 投票
0 回答
32 浏览

ios - 将插座连接到选项卡视图控制器导致 Nil 错误

我创建了一个新的窗口控制器,它tabViewController在我的应用程序中托管一个。我已经向窗口控制器添加了类,并且在选项卡视图中的所有视图控制器中都具有相同的类。

我可以连接按钮并给它们一个动作,它工作得很好,但是,我尝试连接一个插座并尝试通过插座改变一些东西,它返回nil并使程序崩溃。例如,这个确切的代码在我的应用程序的预制中工作viewController,但返回:

通过我创建的新选项卡视图控制器运行它时。

对我来说奇怪的是我可以使用常规视图控制器并且插座连接良好,但如果我想使用选项卡视图控制器,这些 nil 错误正在发生。

我确保 nil 与通过打印音频设备来获取按钮的输入无关,并且音频设备在那里并且能够被打印。即使已连接,按钮似乎也不存在。

我还尝试NSTextField在将其连接到插座后简单地更改颜色,这会返回相同的 nil 错误。

知道我在这里可能做错了什么吗?非常感谢帮忙。