我试图通过提供包标识符来退出带有 AppleScript 的应用程序。
我的代码不起作用:
tell application "System Events" to quit (application whose bundle identifier is "com.apple.Notes")
或者
quit app "com.apple.Safari"
我正在编写一个 MacOS 应用程序。我正在显示一个按钮。当应用程序处于非活动状态时,如果我单击按钮,按钮的点击事件将在窗口激活的同时触发。到目前为止,一切都很好。
但是,如果我现在添加.buttonStyle(PlainButtonStyle())
到所需外观的按钮,则当窗口处于非活动状态时不会点击它。第一次单击会激活窗口,我需要第二次单击才能触发按钮。
Button {
print("tapped!")
} label: {
Image(systemName: "doc.on.doc")
.resizable()
.frame(width: 14, height: 14)
.padding(5)
}
.buttonStyle(PlainButtonStyle())
我想为 macOS 创建一个带有嵌入式 PDFThumbnailView 的 PDFView。PDFThumbnailView 应垂直,位于 PDFView 的右侧。我希望两个视图都位于一个 NSViewRepresentable 内。但是,我不太熟悉 UIKit 及其约束,我能做的最好的事情就是使 PDFThumbnailView 与 PDFView 重叠。如何使 PDFView 和 PDFThumbnailView 分开,这样它们就不会重叠?这是代码:
struct PDFViewWrapper: NSViewRepresentable {
let pdfView = PDFView()
@Binding var pdfDisplay: Int
func makeNSView(context: Context) -> PDFView {
let fileURL = FileManagerClient.shared.getDocumentsDirectory().appendingPathComponent("example.PDF")
let pdfDocument = PDFDocument(url: fileURL)
///
let thumbnailView = PDFThumbnailView()
thumbnailView.translatesAutoresizingMaskIntoConstraints = false
pdfView.addSubview(thumbnailView)
thumbnailView.pdfView = pdfView
NSLayoutConstraint.activate(
[
thumbnailView.leadingAnchor.constraint(equalTo: pdfView.safeAreaLayoutGuide.leadingAnchor),
thumbnailView.topAnchor.constraint(equalTo: pdfView.safeAreaLayoutGuide.topAnchor),
thumbnailView.bottomAnchor.constraint(equalTo: pdfView.safeAreaLayoutGuide.bottomAnchor),
thumbnailView.widthAnchor.constraint(equalToConstant: 80),
]
)
thumbnailView.thumbnailSize = CGSize(width: 100, height: 100)
thumbnailView.backgroundColor = .placeholderTextColor
///
pdfView.document = pdfDocument
pdfView.autoScales = true
pdfView.displayMode = PDFDisplayMode(rawValue: pdfDisplay) ?? .singlePageContinuous
return pdfView
}
func updateNSView(_ uiView: PDFView, context: Context) {}
}
我正在尝试使用 PDFKit 和 NSViewRepresentable 包装器显示 pdf 文件
以下代码显示灰色框架,而不显示所选 pdf 文件的内容
import SwiftUI
import AppKit
import PDFKit
struct ContentView: View {
@State var pdfURL: URL? = nil
var body: some View {
VStack {
Button {
let panel = NSOpenPanel()
panel.allowsMultipleSelection = false
panel.canChooseDirectories = false
if panel.runModal() == .OK {
if let src = panel.url {
pdfURL = src
}
}
} label: {
Text("Pick a PDF file")
}
PDFKitView(url: pdfURL)
.scaledToFit()
}
.padding()
}
}
#Preview {
ContentView()
}
struct PDFKitView: NSViewRepresentable {
let url: URL?
func makeNSView(context: NSViewRepresentableContext<PDFKitView>) -> PDFView{
let pdfView = PDFView()
if let url = url {
pdfView.document = PDFDocument(url: url)
}
return pdfView
}
func updateNSView(_ nsView: PDFView, context: NSViewRepresentableContext<PDFKitView>) {
}
}
我不明白我做错了什么。这是选择 pdf 文件后的屏幕截图
我正在做自己的本地化,在加载窗口/视图后预先解析所有窗口控件,并翻译所有特殊标记的值、工具提示等。
但是,如果我为表格单元格视图预设工具提示,我将无法弄清楚如何从 NSTableView 对象访问它。
这是 Xcode 的 IB 中的单元格视图:
以及单元格视图的工具提示属性:
当我只有对其 TableView 对象的引用时,如何以原型形式获取该 TableCellView,以便我可以更改稍后添加的所有行的工具提示?
一定有办法,因为当使用aNSArrayController
来管理表视图行时,TableView如何知道如何添加行,而我的代码根本没有显式引用这些原型,这意味着必须NSArrayController
有办法找到这些细胞原型——我也想实现同样的目标。
我知道我可以在加载视图的代码中添加来自标头视图的绑定,但我正在尝试编写一个通用方法,该方法仅给出根表视图并查找其中的所有工具提示。
我尝试将“添加”按钮添加到与Xcode 窗口中相同的应用程序NavigationSplitView
内的侧边栏。macos
在侧边栏视图中使用此代码确实会在视图顶部创建按钮,但在折叠侧边栏时它不会隐藏。
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button(action: addUser) {
Label("Create New User",
systemImage: "person.crop.circle.badge.plus")
}
.help("New User")
}
如何在底部创建一个侧边栏视图特定按钮,该按钮粘在侧边栏上并在侧边栏折叠时隐藏?谢谢!
我正在尝试删除停靠图标,关闭窗口,并让应用程序使用 Tauri 在后台运行。
我可以关闭窗口,但我不知道如何在窗口关闭后删除应用程序图标。
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello ->, {}!", name)
}
fn main() {
tauri::Builder::default()
.setup(|app| {
// #[cfg(target_os = "macos")]
// app.set_activation_policy(tauri::ActivationPolicy::Accessory); // this removes the dock icon by default
Ok(())
})
.build(tauri::generate_context!())
.expect("error while building tauri application")
.run(|_app_handle, event| match event {
// dock icon should be removed here, but I don't know how, share the app state?
tauri::RunEvent::ExitRequested { api, .. } => {
api.prevent_exit();
}
_ => {}
})
}
当在 Intelij Idea 中时,我尝试查看位于隐藏目录(项目外部)(如 .hiddenDirectory)中的文件之间的差异,然后 Idea 不会在对话框中显示此类目录。Finder(MacOS)显示该文件 - 我相应地进行了设置。想法-不是。如何在Idea中看到它们?
我编写了一个示例应用程序(适用于 macOS),其中包含 3 个用户。我对 NavigationSplitView 中的每个用户使用 NavigationLink。单击任何用户的导航链接时,详细视图应在编辑模式下显示用户名和年龄。它有效,但仅当第一个用户被单击时。如果我单击任何用户,则详细信息视图不会更改:它显示第一个用户数据。
我是 SwiftUI 的新手,我确信我误解了一些东西,但除了 SwiftUI 之外,我有 20 多年的编程经验。谢谢你的帮助。
我用谷歌搜索了几天,得到了很多好主意(尤其是来自 stackoverflow),但我无法解决我的问题。希望有人能解释我做错了什么。
// Create users array
class Users: ObservableObject {
@Published var users: [UserItem] = [
UserItem(id: 0, nickName: "Nick1", familyName: "Family1", firstName: "First1", age: 42),
UserItem(id: 1, nickName: "Nick2", familyName: "Family2", firstName: "First2", age: 39),
UserItem(id: 2, nickName: "Nick3", familyName: "Family3", firstName: "First3", age: 35)
]
}
// Define user properties
class UserItem: Identifiable, ObservableObject {
@Published var id:Int
@Published var nickName:String
@Published var familyName:String
@Published var firstName:String
@Published var age:Int
init(id:Int, nickName:String, familyName:String, firstName:String, age:Int) {
self.id = id
self.age = age
self.familyName = familyName
self.firstName = firstName
self.nickName = nickName
}
func fullName() -> String {
return "\(self.familyName) \(self.firstName) (\(self.nickName)) \(self.age)"
}
}
// Show users and their detail
struct Test2: View {
@StateObject var usersData = Users()
var body: some View {
NavigationSplitView {
List {
ForEach(usersData.users) { user in
NavigationLink {
UserDetailsView(user: user)
} label:{
Text(user.fullName())
}
}
Spacer()
}
} detail: {
Text("Select a user to edit.")
}
.padding()
.navigationTitle("Users")
}
}
// Show user detail
struct UserDetailsView: View {
@StateObject var user: UserItem
var body: some View {
VStack {
TextField("Family name", text: $user.familyName)
TextField("First name", text: $user.firstName)
TextField("Nick name", text: $user.nickName)
Stepper("Age: \(user.age)", value: $user.age)
Spacer()
// Check user property (live update))
Text(user.fullName())
}.padding()
}
}
#Preview {
Test2()
}
❯ alr build
ⓘ Building myproj/myproj.gpr...
Link
[link] myproj.adb
0 0x10034af43 __assert_rtn + 64
1 0x10024cf43 ld::AtomPlacement::findAtom(unsigned char, unsigned long long, ld::AtomPlacement::AtomLoc const*&, long long&) const + 1411
2 0x100269431 ld::InputFiles::SliceParser::parseObjectFile(mach_o::Header const*) const + 19745
3 0x100279e44 ld::InputFiles::parseAllFiles(void (ld::AtomFile const*) block_pointer)::$_7::operator()(unsigned long, ld::FileInfo const&) const + 1380
4 0x7ff8051315cd _dispatch_client_callout2 + 8
5 0x7ff805141e3e _dispatch_apply_invoke + 214
6 0x7ff80513159a _dispatch_client_callout + 8
7 0x7ff80514099d _dispatch_root_queue_drain + 879
8 0x7ff805140f22 _dispatch_worker_thread2 + 152
9 0x7ff8052d5c06 _pthread_wqthread + 262
ld: Assertion failed: (resultIndex < sectData.atoms.size()), function findAtom, file Relocations.cpp, line 1336.
collect2: error: ld returned 1 exit status
gprbuild: link of myproj.adb failed
gprbuild: failed command was: /users/sdey02/.config/alire/cache/dependencies/gnat_native_13.2.1_c21501ad/bin/gcc myproj.o b__myproj.o -L/Users/sdey02/myproj/obj/development/ -L/Users/sdey02/myproj/obj/development/ -L/users/sdey02/.config/alire/cache/dependencies/gnat_native_13.2.1_c21501ad/lib/gcc/x86_64-apple-darwin21.6.0/13.2.0/adalib/ /users/sdey02/.config/alire/cache/dependencies/gnat_native_13.2.1_c21501ad/lib/gcc/x86_64-apple-darwin21.6.0/13.2.0/adalib/libgnat.a -Wl,-rpath,@executable_path/..//obj/development -Wl,-rpath,@executable_path/../..//.config/alire/cache/dependencies/gnat_native_13.2.1_c21501ad/lib/gcc/x86_64-apple-darwin21.6.0/13.2.0/adalib -o /Users/sdey02/myproj/bin//myproj
error: Command ["gprbuild", "-s", "-j0", "-p", "-P", "/Users/sdey02/myproj/myproj.gpr"] exited with code 4
error: Compilation failed.
错误似乎是这样的:
ld: Assertion failed: (resultIndex < sectData.atoms.size()), function findAtom, file Relocations.cpp, line 1336.
我运行了 alr build 命令并期望构建板条箱,但结果却出现了退出并出现代码 4 错误。
我检查了其他线程,这似乎是最新版本的命令行工具的问题。我有什么选择来解决这个问题?