SwiftUI
NavigationLinkを使って画面Aから画面Bへ遷移して、画面Bから戻ったときにたとえばデータの再読み込みなどなんらかの処理をしたいが、普通にViewを書いていると 戻ってきたときに onAppear が呼ばれない現象が発生する。 本記事では、NavigationLinkを使って…
SwiftUIで List の同じ行に複数の Button を置くと、すべてのButtonのアクションイベントが発生してしまい、それぞれのボタンを個別にタップできない。 本記事では、個別にタップする方法と、よりボタンらしく見せるために ButtonSyle を利用する方法を紹介…
SwiftUIでは直接UIColorを使うことができません。 実行環境 Xcode 11.6 iOS 13.6 UIColor to Color UIColorをSwiftUIのColorに変換するのは簡単です。 let color = Color(UIColor.label) システムで定義されているUIColorの色を使いたい Xcode 11.6時点で不…
Buttonの中にTextやImageを内包するとボタンが青色になってしまう。 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 やりたいこととしては、下図のように目のアイコンボタンをタップして、ONの時は赤色、OFFの時はグレーの表示にしたい。 UIの想定としてはONにな…
Text() のフォント指定にUIFontが使えなかった。どうしたらよいのか? 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 UIFont.futuraMediumFont(ofSize:) のようにカスタムフォントを使いやすくするユーティリティクラスを作成している。 import UIKit extension …
Xcode 11.7 + iOS 13.7の環境でTextFieldを使っていると、日本語入力時に挙動がおかしくなることに気がついた。開発中はハードウェアキーボードで英数字のみ入力していたので気がつかなかった。 実行環境 Xcode 11.7 iOS 13.7 問題の挙動 SwiftUIのTextField…
ひとつのViewから複数の画面をモーダルへ遷移したい。ボタンを複数用意して、それぞれ対応する画面をモーダル表示させようとしたがうまくいかない。 .sheet() modifierを設定すれば、モーダル表示できることは知っているが、それぞれ異なる複数の画面への遷…
下図のように 画像を選択 → 画像の切り出し(クロッピング) と複数の画面を連続してモーダル表示させつつ遷移させたい。 モーダルA → モーダルB と連続して遷移できるが、モーダルBがなぜか閉じれなくなってしまう。 実行環境 Xcode 11.6 iOS 13.6 問題の挙動…
NavigationViewのタイトルには Text() を指定できるが、タイトルに対して font Modifierを設定してもカスタムフォントが反映されなかった。 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 あらかじめFontクラスでカスタムフォントを返す拡張メソッドを追加した。…
iOSで画像やテキストなどを他のアプリへシェアするときには UIActivityViewController を利用する。SwiftUIでも UIActivityViewControllerを使って画像を共有する処理を紹介する。 実行環境 Xcode 11.6 iOS 13.6 UIActivityViewControllerを使って画像を共有…
正方形の形のViewを作成できなかった。どうすればよいのか? 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 横いっぱいの正方形のViewを表示したい。具体的には下図のようにしたい。 横いっぱいにするには .frame(maxWidth: .infinity) を指定すれば良い。 impor…
NavigationViewでdisplayModeを指定すると、起動時にアプリがクラッシュした。Xcode 12 beta 2で修正されたようだが、Xcode 11.6であればかならずクラッシュが発生してしまう。 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 これは実行できる。 struct HomeView…
iOSでテキストデータや画像を共有したい場合、UIActivityViewController を使用します。 SwiftUIではこのUIActivityViewControllerをラッピングして利用すると便利です。SwiftUIでUIActivityViewController を使う方法については「SwiftUIで UIActivityViewC…