问题标签 [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.
swift - 如何在 Swift 4 中为 NSTabViewController 创建自定义导航栏
我在 Swift 4 中开发一个 osx 应用程序以显示在菜单栏中,并在单击时调用一个弹出窗口以显示许多不同的视图。
我在 Storyboard 中的结构是: NSView > Container View > Tab View
这让我可以在能够在选项卡之间切换的同时维护一个顶部菜单栏。
我隐藏了 NSTabView 中的按钮,并设法使用以下代码在加载视图之间进行更改:
当我启动我的应用程序时,它会以编程方式加载第三个选项卡,这很棒!
然而,我想要做的是在父 ViewController 中创建我自己的菜单来调用这个函数,以便标签在容器中发生变化。
是否可以以某种方式从父级调用此函数?
我已经到处寻找解决这个问题的方法,并且非常接近,但希望这里有人可以帮助我。如果不够清楚,我可以添加我的故事板的图片吗?
提前致谢。
cocoa - 为什么 viewDidLoad() 函数在我的 NSTabViewController 的每个 NSViewController 中运行?
在启动时,我的 macOS 应用程序会显示一个 NSTabViewController,其中包含大约 10 个选项卡。我注意到 viewDidLoad() 函数在启动时在所有这些视图控制器中运行。
但苹果文档说:
选项卡视图控制器延迟加载与每个子视图控制器关联的视图,仅在选择相应选项卡后创建它们。首次显示选项卡视图控制器的视图时,仅加载最初选择的选项卡的视图。
这样,只有第一个(选定的)视图控制器应该调用 viewDidLoad()。那么为什么所有子视图控制器的 viewDidLoad() 都会在启动时被调用?
自然,如果我在所有选项卡中将 viewDidLoad() 替换为 viewWillAppear() 函数,它们只会在切换到特定选项卡时被调用。
一件具体的事情是我使用 Realm,并且每个子视图控制器中都有“import RealmSwift”。这可能是一个原因吗?
ios - 如何从另一个视图(swift 4)对选项卡栏控制器中的特定视图执行 performSegue
在我的 iOS 应用程序中,在viewController中,我尝试在Tab Bar Controller中打开特定视图。
我使用 performSegue。
首先,我尝试直接导航到特定视图,但在这种情况下,标签栏消失了
所以我尝试导航到 tabViewController,这导致我进入默认视图(第一个)
知道如何导航到 TabBarController 中的特定视图吗?
我使用的 performSegue:
我用 swift 4
macos - 如何从可恢复的 NSWindow 中排除某些 AppKit 视图?
可以制作 NSWindows,restorable
以便在应用程序启动之间保留它们的配置。
https://developer.apple.com/documentation/appkit/nswindow/1526255-restorable
应在启动周期之间保留 Windows,以保持用户界面的连续性。在随后的启动周期中,系统会尝试重新创建窗口并将其配置恢复到保留状态。配置数据根据需要更新并由系统自动保存。
在一个新的 macOS 项目中,Storyboard 上的 NSWindowrestorable
默认为:
我的问题是在 NSWindow 中嵌入 NSTabViewController 时出现的。
NSTabViewrestorable
自动继承窗口的状态,无需添加代码。
这使得选定的选项卡在应用程序启动之间保持不变。我不想要那个。我希望它始终默认为索引 0。如果所选选项卡已恢复,尝试以编程方式选择选项卡会viewDidLoad
产生意外结果。
如何强制将某些 AppKit UI 元素从 NSWindow 状态恢复中排除?
我希望选项卡视图不可恢复。
但我想保留其他可恢复的好处,例如恢复之前设置的窗口大小。
如何从 NSWindow 状态恢复中排除单个视图?
swift - 如何在 NSTabViewController 中禁用延迟加载?
我正在为 NSTabViewController 设计一个带有工具栏样式的 SwiftUI 包装器。我希望它成为 TabView 的替代品。TabView 使用修饰符tabItem(_:)
来指定选项卡名称和图标。所以我为自己设计了一个类似的修饰符ToolbarTabView
:
我将每个包装View
在 a 中NSHostingController
并创建一个NSTabViewItem
. 然后我onPreferenceChange
用来设置NSTabViewItem
'slabel
和image
属性。最后,我必须NSViewControllerRepresentable
将我的数组传递NSTabViewItem
给NSTabViewController
. 除了以下问题外,这一切都很好。
按照设计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
ios - 将插座连接到选项卡视图控制器导致 Nil 错误
我创建了一个新的窗口控制器,它tabViewController
在我的应用程序中托管一个。我已经向窗口控制器添加了类,并且在选项卡视图中的所有视图控制器中都具有相同的类。
我可以连接按钮并给它们一个动作,它工作得很好,但是,我尝试连接一个插座并尝试通过插座改变一些东西,它返回nil并使程序崩溃。例如,这个确切的代码在我的应用程序的预制中工作viewController
,但返回:
通过我创建的新选项卡视图控制器运行它时。
对我来说奇怪的是我可以使用常规视图控制器并且插座连接良好,但如果我想使用选项卡视图控制器,这些 nil 错误正在发生。
我确保 nil 与通过打印音频设备来获取按钮的输入无关,并且音频设备在那里并且能够被打印。即使已连接,按钮似乎也不存在。
我还尝试NSTextField
在将其连接到插座后简单地更改颜色,这会返回相同的 nil 错误。
知道我在这里可能做错了什么吗?非常感谢帮忙。