iOSでの UINavigationBar にあたるのが AppBar である。例えば AppBar に設定ボタンを置きたいとした場合、どのように対応すれば良いのかを記す。 実行時のスクショ macOSではDEBUGの文字に隠れて見えにくいがAndroidと同様に設定ボタンが表示されている。to…
SwiftUIではTabViewを使ってタブバーを実装します。画像とラベルがセットになっているのか、画像のみのタブバーアイテムにした場合、ラベル分が空白になってしまいます。そのため、タブバーアイテムのアイコンを下方向にずらします。 extension UITabBarCont…
Xcode 11.7 + iOS 13.7の環境でTextFieldを使っていると、日本語入力時に挙動がおかしくなることに気がついた。開発中はハードウェアキーボードで英数字のみ入力していたので気がつかなかった。 実行環境 Xcode 11.7 iOS 13.7 問題の挙動 SwiftUIのTextField…
Android Jetpack Composeはいまも開発が進んでおり安定版は存在せず、インストール方法もバージョンによって異なっている。 公式のドキュメントでも追従しきれていないようで、日本語の導入ドキュメント では 0.1.0-dev13 が説明で使われており、英語の導入…
デスクトップ上に置いている画像を追加するとして、、、 iPhoneシミュレータをホーム画面にする デスクトップに置いている画像をドラッグ&ドロップする 写真アプリで「All Photos」を確認する。 で、下図のように画像が追加される。
Buttonの中にTextやImageを内包するとボタンが青色になってしまう。 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 やりたいこととしては、下図のように目のアイコンボタンをタップして、ONの時は赤色、OFFの時はグレーの表示にしたい。 UIの想定としてはONにな…
Property List (plist)ファイルで定義した配列をUITableViewで表示したいという質問に回答しました。 私もObjective-C を使っていた時代にplistで表示項目のON/OFFの切り替えを管理していた時期を思い出しました。あの頃は PropertyListDecoder がなくて、pl…
Firebase Analytics for iOSを 6.6.2 から 6.7.0 へアップデートしたところ、setScreenName(_:screenClass:) でdeprecatedになったよと警告が出るようになりました。 開発中のアプリでは下記のようなメソッドで画面名をトラッキングしています。 import Fire…
下記のように店舗情報のキーが数字になっているJSONデータをデシリアライズできるか?と質問があり回答しました。 { "response": { "total_hit_count": 4, "0": { "shop_id": "6072772", "shop_name": "店舗A" }, "1": { "shop_id": "6072773", "shop_name":…
iOSでテキストデータや画像を共有したい場合、UIActivityViewController を使用します。 SwiftUIではこのUIActivityViewControllerをラッピングして利用すると便利です。SwiftUIでUIActivityViewController を使う方法については「SwiftUIで UIActivityViewC…
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時点で不…
iOSで画像やテキストなどを他のアプリへシェアするときには UIActivityViewController を利用する。SwiftUIでも UIActivityViewControllerを使って画像を共有する処理を紹介する。 実行環境 Xcode 11.6 iOS 13.6 UIActivityViewControllerを使って画像を共有…
下図のように 画像を選択 → 画像の切り出し(クロッピング) と複数の画面を連続してモーダル表示させつつ遷移させたい。 モーダルA → モーダルB と連続して遷移できるが、モーダルBがなぜか閉じれなくなってしまう。 実行環境 Xcode 11.6 iOS 13.6 問題の挙動…
ひとつのViewから複数の画面をモーダルへ遷移したい。ボタンを複数用意して、それぞれ対応する画面をモーダル表示させようとしたがうまくいかない。 .sheet() modifierを設定すれば、モーダル表示できることは知っているが、それぞれ異なる複数の画面への遷…
正方形の形のViewを作成できなかった。どうすればよいのか? 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 横いっぱいの正方形のViewを表示したい。具体的には下図のようにしたい。 横いっぱいにするには .frame(maxWidth: .infinity) を指定すれば良い。 impor…
NavigationViewのタイトルには Text() を指定できるが、タイトルに対して font Modifierを設定してもカスタムフォントが反映されなかった。 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 あらかじめFontクラスでカスタムフォントを返す拡張メソッドを追加した。…
Text() のフォント指定にUIFontが使えなかった。どうしたらよいのか? 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 UIFont.futuraMediumFont(ofSize:) のようにカスタムフォントを使いやすくするユーティリティクラスを作成している。 import UIKit extension …
NavigationViewでdisplayModeを指定すると、起動時にアプリがクラッシュした。Xcode 12 beta 2で修正されたようだが、Xcode 11.6であればかならずクラッシュが発生してしまう。 実行環境 Xcode 11.6 iOS 13.6 問題の挙動 これは実行できる。 struct HomeView…
Objective-Cで特定のクラス(またはサブクラス)であるかどうか判定する場合には、[view isKindOfClass:[UIImageView class]]を使っていた。 swiftでは以下のように書くことができる。 view.isKindOfClass(UIImageView)
特定の範囲の乱数を求める際には、Objective-Cと同じようにarc4random関数を使うことができます。 //0から9までの値を取得する let random = arc4random() % 10 上記のコードではarc4random関数で得た乱数の余剰を求めているため、arc4random関数では生成さ…
過去にObjective-CでNSCalendarクラスとNSDateComponentsクラスを使って、以下のような現在の年度をNSNumber型で取得するメソッドがありました。このメソッドを - (NSNumber*)yearNumber { NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarId…
NSString型の文字列を画像に変換します。「サイズを指定して空のUIImageオブジェクトを生成する - iOSアプリ開発の逆引き辞典」をベースとしています。 - (UIImage *)imageWithString:(NSString *)text { // 描画するサイズ CGSize size = CGSizeMake(34, 18…
NSTimerのカテゴリを扱ったプロジェクトは沢山ありますが、その中でも「NSTimer-Blocks」が使いやすくて重宝しています。 GitHub - jivadevoe/NSTimer-Blocks: Simple category on NSTimer to give it blocks capability. 実際に使う際には、下記のように使…
フォントを指定して、文字列が描画されるサイズを求めるのにiOS 6まではsizeWithFont:メソッドとsizeWithFont:constrainedToSize:lineBreakMode:メソッドを使っていました。iOS 7ではこれらのメソッドの使用が非推奨になっています。 - (CGSize)sizeWithFont…
@interface部分でiAd.hをインポートします。 #import <iAd/iAd.h> @interface ViewController() <ADBannerViewDelegate> { } @property (weak, nonatomic) ADBannerView *adView; @end viewDidLoadメソッドでADBannerViewを生成してviewに追加しています。 - (void)viewDidLoad { // 〜〜〜 中</adbannerviewdelegate></iad/iad.h>…
UITableViewは、決められたフォーマット(UITableViewCell)に基づいてリスト形式でデータを表示するクラスです。 データが多くなりリストが長くなった場合には、SectionIndex(セクションインデックス)を使ってセクション単位でのジャンプをする機能を提供しま…
NSStringクラスのdrawInRect:withFont:lineBreakMode:alignment:メソッドは、iOS 7.0から「deprecated(非推奨)」となり、下図のようなワーニング表示されるようになりました。 横に長いため全文表示ができていませんが、下記のようなワーニングが表示されて…
UISegmentedControl(セグメンテッドコントロール)は、いくつかの項目に分割されたボタンを管理するクラスです。 UISegmentedControlを単純に配置した場合、iOS 7.0以降では下図のように表示されます。 本記事では、セグメンテッドコントロールをカスタマイズ…