我正在尝试为我的应用程序中的每个视图创建一个自定义菜单,但是看来buildMenu没有在视图控制器中调用。这是一个例子:
在我的AppDelegate中,使用了此代码,该代码可以按预期100%运行。
override func buildMenu(with builder: UIMenuBuilder) {
print("Updating menu from AppDelegate")
super.buildMenu(with: builder)
let command = UIKeyCommand(
input: "W",
modifierFlags: [.command],
action: #selector(self.helloWorld(_:))
)
command.title = "Hello"
builder.insertChild(UIMenu(
__title: "World",
image: nil,
identifier: UIMenu.Identifier(rawValue: "com.hw.hello"),
options: [],
children: [command]
), atEndOfMenu: .file)
}
@objc private func helloWorld(_ sender: AppDelegate) {
print("Hello world")
}
Run Code Online (Sandbox Code Playgroud)
但是我需要根据用户在应用程序中的位置来更改菜单中可用的选项,因此我尝试在UIViewController中执行此操作:
override func viewDidAppear(_ animated:Bool){
// Tried all of these to see if any work
UIMenuSystem.main.setNeedsRebuild()
UIMenuSystem.context.setNeedsRebuild()
UIMenuSystem.main.setNeedsRevalidate()
UIMenuSystem.context.setNeedsRevalidate()
}
Run Code Online (Sandbox Code Playgroud)
然后再次..
// This is never called …Run Code Online (Sandbox Code Playgroud) 我正在努力弄清楚如何将我tabbar基于 iPad 的应用程序变成基于侧边栏导航的Catalyst应用程序。类似于 Apple 显示的屏幕截图:
您可以在上面的屏幕截图中看到 iPad 应用程序使用tabbar布局,但macOSCatalyst 应用程序使用左侧边栏导航。
我怎样才能做到这一点并将我的 iPad 应用程序转换为使用侧边栏macOS?
我正在迁移我的 iOS 应用程序以支持 MacCatalyst,但我想防止用户调整窗口大小。
你有什么建议吗?
如何以编程方式更改 mac 催化剂上 UITextField 的提示颜色?
提示存在,但颜色与 UITextField 相同。
提示在 iOS 上显示正确的颜色。
我没有成功尝试.tintColor
我正在使用 Mac Catalyst 开发一个应用程序。
当用户关闭 Mac 版本上的窗口时,应用程序将终止。
可以通过使用以下方法来改变 Cocoa 中的这种行为:
applicationShouldTerminateAfterLastWindowClosed
Run Code Online (Sandbox Code Playgroud)
方法或通过在 plist 文件中将 NSSupportsAutomaticTermination 设置为 NO 。
如何在 Mac Catalyst 应用程序中获得相同的效果?
我正在使用react-native 0.62.x
如果react-native在Catalyst中运行(系统是macOS),Platform.OS仍然会是iOS. 有官方的方法可以检测isCatalyst吗?
在默认的“文件”菜单中,它有“打开最近的>”菜单项,并且它是自动添加的。目前,如果用户从 Finder 打开关联文件,则会自动添加最近的项目(在 Big Sur 上)。但是如果用户使用 UIDocumentPickerViewController 从我的应用程序打开,它不会添加最近的菜单项。
我想在“打开最近的>”下添加此菜单项并从我的代码中清除项目。有帮助文档或者示例代码吗?谢谢。
目前我有一个 iOS 应用程序,我正在尝试为 Mac Catalyst 构建它,不幸的是,在构建时,我遇到了一些不同目标的以下错误:
为 Mac Catalyst 构建,但嵌入式应用扩展“ShareExtension.appex”是为 iOS 构建的。您可能需要配置“ShareExtension.appex”以构建 Mac Catalyst 或限制应将此应用程序扩展嵌入到目标编辑器中的平台。
当 MacOS 是我构建的平台时,如何禁用共享扩展?
我在UIViewController确认以下代码中有此代码UIDocumentPickerDelegate:
- (void)openTextFilePicker {
NSArray *UTIs = [NSArray arrayWithObjects:@"public.text", nil];
[self openFilePicker:UTIs];
}
- (void)openFilePicker:(NSArray *)UTIs {
UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:UTIs inMode:UIDocumentPickerModeImport];
documentPicker.delegate = self;
documentPicker.popoverPresentationController.barButtonItem = self.importButton;
[self presentViewController:documentPicker animated:TRUE completion:nil];
}
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURLs:(NSArray<NSURL *> *)urls {
[self documentPicker:controller didPickDocumentAtURL:[urls firstObject]];
}
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
NSLog(@"picked document %@", url);
}
- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller {
NSLog(@"cancelled");
}
Run Code Online (Sandbox Code Playgroud)
这在 iOS 中运行良好。在 Mac Catalyst 中,文件选择器打开,我可以导航和选择一个文件,但是当我单击选择器中的打开按钮时,既不调用didPickDocumentAtURLs也不didPickDocumentAtURL调用。但是,如果我单击选择器中的取消按钮,documentPickerWasCancelled则会调用。 …
我有一个 iOS 应用程序,我已为其启用了 Catalyst。应用程序中的一项功能会打开一个新窗口。默认情况下,此窗口打开得很大,但我需要一种方法来使其默认变小。我知道您可以设置windowScene.sizeRestrictions?.minimumSize和.maximumSize,但这会将窗口限制为我喜欢的大小。我想让窗口打开一定的大小(默认500x800情况下),但用户可以将其扩展到他们想要的任何大小。
我已经window?.frame = CGRect(origin: .zero, size: CGSize(width: 500, height: 800))在 中尝试过SceneDelegate,但没有效果。
视觉示例:

mac-catalyst ×10
ios ×7
swift ×3
macos ×2
xcode ×2
ios13 ×1
objective-c ×1
react-native ×1
uidocumentpickerviewcontroller ×1
uikit ×1
uikitformac ×1
uimenu ×1
uitextfield ×1