SwiftUI

SwiftUI新しいdismiss書き方

以前の書き方: 定義: @Environment(\.presentationMode) private var presentationMode 使用: presentationMode.wrappedValue.dismiss() 現在の書き方: 定義: @Environment(\.dismiss) private var dismiss 使用: dismiss()

StoryBoardでSwiftUIをプレビューする

import SwiftUI import PlaygroundSupport struct ContentView: View { var body: some View { Text("Hello World") } } PlaygroundPage.current.liveView = UIHostingController(rootView: ContentView())

Programmatic Navigation Link

struct ViewA: View { @State private var isShowingViewB = false var body: some View { VStack { Button("Show View B") { isShowingViewB = true } NavigationLink( isActive: $isShowingViewB, destination: { ViewB() }, label: { EmptyView() } ) } }…

Dynamic Font無効化

Apple DocumentからdynamicTypeSize(_:)という関数を発見した。 下記の例はフォントタイプを強制的にxLargeに設定する: ContentView() .dynamicTypeSize(.xLarge) 下記の例はフォントタイプをlarge以下限定する: ContentView() .dynamicTypeSize(...Dynami…

layoutPriority

VStackを使う時、真ん中のtextはtruncateされることがある。 この時.layoutPriority(1)を追加すれば問題解消できる。

SwiftUIのライフサイクル

@main struct SomeApp: App { @Environment(\.scenePhase) private var scenePhase var body: some Scene { WindowGroup { ContentView() }.onChange(of: scenePhase) { (phase) in switch phase { case .active: // The scene is in the foreground and int…

UIKitのプロジェクトにSwiftUIのViewを呼び出す

let pcHostingController = UIHostingController(rootView: PcView(pc: selectedPc)) navigationController?.pushViewController(pcHostingController, animated: true)

MacOS 11 beta: ZStack inside GeometryReader

私のアプリ美しいサイコロはMacOS 11 betaでテストする時バグが出た。 本来サイコロは画面の真ん中表示するはずだが、なぜかMacOS 11 betaには左上になってしまいました。 本来あるべき姿 MacOS 11 betaのバグ よく調べると、GeometryReaderの中のZStack、本…

ObservableObjectをCodableさせる

class Person: ObservableObject, Codable { @Published var name = "" @Published var age = 0 enum CodingKeys: CodingKey { case name, age } init() { } required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy:…

SwiftUIにCore Dataの使用 データ新規、変更と削除

管理用オブジェクト取得 まずはContentViewに@Environment(\.managedObjectContext) var contextを定義する。このcontextはCore Dataの管理用のオブジェクト。 context定義だけで使用できる原因は、プロジェクト作成時"Use Core Data"をチェックする時、Scen…

SwiftUIにCore Dataの使用 データ取得

Core Data導入 Core Dataを使うため、プロジェクト作成時「Use Core Data」をチェックする。 プロジェクト作成後、拡張子「.xcdatamodeld」が自動作成される。その中にEntityを作成する。 データの取得 @FetchRequest( entity: Singer.entity(), sortDescrip…

SwiftUI画面遷移の二つ方法

方法一:sheet struct ContentView: View { @State private var showSecondView = false var body: some View { Button("Show Second View") { self.showSecondView.toggle() } .sheet(isPresented: $showSecondView) { SecondView() } } } struct SecondVie…

SwiftUIよく使う部品のサンプル

TextField TextField("Your answer is ...", text: $answer) .keyboardType(.numberPad) .textFieldStyle(RoundedBorderTextFieldStyle()) Stepper Stepper(value: $sleepAmount, in: 4...12, step: 0.25) { Text("\(sleepAmount, specifier: "%g") hours") …