Swift Mac Os 응용 프로그램 - NSSavePanel이 '백그라운드 전용' 응용 프로그램에서 올바르게 작동하지 않습니다. (Swift Mac Os Application - NSSavePanel does not behave correctly with a 'background only' application)


문제 설명

Swift Mac Os 응용 프로그램 ‑ NSSavePanel이 '백그라운드 전용' 응용 프로그램에서 올바르게 작동하지 않습니다. (Swift Mac Os Application ‑ NSSavePanel does not behave correctly with a 'background only' application)

저는 Application is background onlytrue로 설정된 상태 표시줄(팝오버 포함)에서만 작동하는 신속한 Mac OS 앱을 개발 중입니다.

팝오버 내부에서 사용자는 버튼과 상호작용하여 이미지를 저장할 수 있습니다. 보다 구체적으로 다음 기능이 트리거됩니다.

@IBAction func saveImage(sender: NSButton) {
    self.closePopover()

    let dialog = NSSavePanel()

    let date = Date()
    let formattedDate = getFormattedDate(date: date, format: "yyyy‑MM‑dd")
    let formattedTime = getFormattedDate(date: date, format: "HH.mm.ss")
    dialog.level = .modalPanel
    dialog.title                    = "Choose a destination"
    dialog.nameFieldStringValue     = "Screenshot \(formattedDate) at \(formattedTime)"
    dialog.showsResizeIndicator     = true
    dialog.showsHiddenFiles         = false
    dialog.canCreateDirectories     = true
    dialog.allowedFileTypes         = ["png"]

    if (dialog.runModal() == .OK) {
        // Pathname of the file
        if let result = dialog.url {
            self.screenshot!.savePNGRepresentationToURL(url: result)
        }
    } else {
        // User clicked on "Cancel"
        return
    }
}

문제는 다음과 같습니다.

  • Application is background only = true: NSSavePanel과 상호 작용할 수 없습니다. (다른 이름으로 저장을 변경할 수 없습니다. 필드) 그리고 그 상자 안에 글을 쓰면 텍스트는 내가 상호 작용했던 마지막 애플리케이션에 작성됩니다(포커스는 실제로 모달에 있지 않음).
  • 애플리케이션은 백그라운드 전용 = false: NSSavePanel은 완벽하게 작동하지만 도크에 아이콘을 표시하고 싶지 않기 때문에 좋은 솔루션이 아닙니다.

그래서 문제는 애플리케이션이 백그라운드 전용임과 명확하게 연결되어 있지만 둘 다 가질 수 있는 방법을 찾지 못했습니다.

  • 앱 아이콘이 독
  • NSSavePanel과의 좋은 상호작용
  • 도크에 앱 아이콘 없음
  • NSSavePanel과의 원활한 상호 작용
  • 도크에 앱 아이콘 없음
  • NSSavePanel과의 원활한 상호 작용

참조 솔루션

방법 1:

I solved using the NSApplication.shared.setActivationPolicy method like this:

@IBAction func saveImage(sender: NSButton) {
    self.closePopover()

    NSApplication.shared.setActivationPolicy(.regular)

    let dialog = NSSavePanel()

    let date = Date()
    let formattedDate = getFormattedDate(date: date, format: "yyyy‑MM‑dd")
    let formattedTime = getFormattedDate(date: date, format: "HH.mm.ss")
    dialog.level = .modalPanel
    dialog.title                    = "Choose a destination"
    dialog.nameFieldStringValue     = "Screenshot \(formattedDate) at \(formattedTime)"
    dialog.showsResizeIndicator     = true
    dialog.showsHiddenFiles         = false
    dialog.canCreateDirectories     = true
    dialog.allowedFileTypes         = ["png"]

    if (dialog.runModal() == .OK) {
        // Pathname of the file
        if let result = dialog.url {
            self.screenshot!.savePNGRepresentationToURL(url: result)
        }
    } else {
        // User clicked on "Cancel"
    }

    NSApplication.shared.setActivationPolicy(.accessory)
}

(by madxmadx)

참조 문서

  1. Swift Mac Os Application ‑ NSSavePanel does not behave correctly with a 'background only' application (CC BY‑SA 2.5/3.0/4.0)

#panel #nssavepanel #swift #macos #nsopenpanel






관련 질문

R을 사용하여 패널 데이터의 마지막 이벤트 이후 실행 계산 (Using R to count a run since last event in panel data)

버튼을 클릭한 후 한 패널을 표시하고 동일한 프레임에서 두 번째 버튼을 클릭하면 다른 패널을 표시합니다. (show one panel after button is clicked and other panel when second button is clicked in the same frame)

외부를 클릭하면 패널을 닫아야 함(초점 상실) (Need To Close A Panel When Clicked Outside (Lost Focus))

asp.net gridview - updatepanel을 사용하여 행당 여러 줄에 바인딩된 데이터 분산 (asp.net gridview - spread bound data across multi lines per row with updatepanel)

문자를 포함하는 고유 식별자와 함께 xtreg 사용 (Using xtreg with unique identifier that includes letters)

matlab SVM은 NaN을 반환합니다. (matlab SVM returns NaN)

특정 형식의 JAVA GUI 제작에 대한 질문 (Question about making a JAVA GUI of a certain format)

슬라이딩 패널 구분선을 사용하여 HTML 페이지를 다른 섹션으로 분할하시겠습니까? 어떻게 이루어지나요? (Splitting HTML page into different sections using sliding panel dividers? How is it done?)

Swift Mac Os 응용 프로그램 - NSSavePanel이 '백그라운드 전용' 응용 프로그램에서 올바르게 작동하지 않습니다. (Swift Mac Os Application - NSSavePanel does not behave correctly with a 'background only' application)

Python 저주 update_panels() 및 Panel.move() 문제 (Python Curses update_panels() and Panel.move() issues)

stargazer를 사용하여 plm FE 회귀에서 전체 R2를 얻는 방법은 무엇입니까? (How to get between and overall R2 from plm FE regression with stargazer?)

Java, 패널용 그래픽 개체 생성 및 편집? (Java, create and edit a Graphics Object for Panel?)







코멘트