LoginSignup
1
3

【SwiftUI】macアプリで新しいタブを開く方法

Last updated at Posted at 2023-07-25

はじめに

Safariのように、新しいタブを開けるmacアプリの作り方を紹介します。

やり方

コード全体

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Button {
                createNewTab()
            } label: {
                Text("Open new tab")
            }
        }
        .padding()
    }
    
    func createNewTab() {
        let text = Text("Hello new tab!")
            .frame(maxWidth: .infinity, maxHeight: .infinity)
        
        let window = NSWindow()
        
        window.contentView = NSHostingView(rootView: text)
        window.title = "New Tab"
        window.styleMask = [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView]
        
        if let keyWindow = NSApp.keyWindow {
            keyWindow.tabGroup?.addWindow(window)
        }
        
        let _ = NSWindowController(window: window)
    }
}

ポイント

1. NSWindowを作る

let window = NSWindow()

2. NSWindowcontentViewNSHostingViewを設定する

window.contentView = NSHostingView(rootView: text)

こうすることで、SwiftUIのViewをNSWindowに表示できます。

3. NSWindowtitleを設定する

window.title = "New Tab"

4. NSWindowstyleMaskを設定する

window.styleMask = [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView]

これがないと、基本的なウィンドウ操作ができません。

5. NSWindowNSApp.keyWindowtabGroupに追加する

if let keyWindow = NSApp.keyWindow {
    keyWindow.tabGroup?.addWindow(window)
}

NSApp.keyWindowで現在アクティブなウィンドウを取得し、取得したウィンドウのtabGroupNSWindowを追加します。

6. NSWindowControllerを作る

let _ = NSWindowController(window: window)

これがないと、タブを閉じた時にクラッシュします。

おわりに

新しいタブを開く方法を紹介しました。この方法を使えば、Safariのようなタブを中心としたアプリを作ることができます。

デモ動画

1
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3