UICollectionViewでContextMenuを使う
UICollectionViewでContextMenuを使う方法です。 セルを長押しするとContextMenuを表示します。 参考: iOS13から追加されるContext Menusについて
SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView)
SwiftUIで画像をピンチで拡大する方法です。 UIImageViewとUIScrollViewを使って画像をピンチで拡大します。 他にはこのような方法があります。 SwiftUIで画像をピンチで拡大する(MagnificationGesture) SwiftUIで画像をピンチで拡大する(PDFView)
SwiftUIで画像をピンチで拡大する(PDFView)
SwiftUIで画像をピンチで拡大する方法です。 画像をピンチで拡大します。 他にはこのような方法があります。 SwiftUIで画像をピンチで拡大する(MagnificationGesture) SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView) 参考: Isn’t there an easy way to pinch to zoom in an image in Swiftui?
SwiftUIで画像をピンチで拡大する(MagnificationGesture)
SwiftUIで画像をピンチで拡大する方法です。 MagnificationGestureを使った方法で画像をピンチで拡大します。 ただこの方法ではドラッグすることができないので、他の方法にする必要があります。 他にはこのような方法があります。 SwiftUIで画像をピンチで拡大する(PDFView) SwiftUIで画像をピンチで拡大する(UIImageView + UIScrollView)
SwiftUIでMapViewを使い複数の位置情報を選択する
SwiftUIでMapViewを使い複数の位置情報を選択する方法です。 addボタンを押した位置情報を記録します。listボタンを押すとその位置情報の一覧を表示します。
MKMapViewで経路を表示する
MKMapViewで経路を表示する方法です。 新宿駅から秋葉原駅への経路を表示しています。 参考: 【Swift】MapKitで経由地点を含めたルートディレクションの表示方法
MKMapViewの表示範囲を設定する
MKMapViewの表示範囲を設定する方法です。 秋葉原駅(35.6984, 139.7731)を中心として緯度経度が±0.1となるように表示されます。 参考: 【Swift】MapKitで経由地点を含めたルートディレクションの表示方法
CollectionViewに区切り線を追加する
CollectionViewに区切り線を追加する方法です。 参考: UICollectionView の Layout で悩んだら Decoration Viewを用いてCollection Viewに区切り線と背景を追加する
CollectionViewの背景にスクロールする画像を設定する
CollectionViewの背景にスクロールする画像を設定する方法です。 よくわかっていないのですが、backgroundColor に画像を設定すると背景にスクロールする画像を設定できます。
UICollectionViewのサンプル
UICollectionViewのサンプルです。 makeColor() 関数でランダムに生成した色をセルに入れています。 スクロールするたびに色が変わります。
SwiftでMapViewの中央に十字を用意し、その中央の座標を取得する
SwiftでMapViewの中央に十字を用意し、その中央の座標を取得する方法です。 スクロールしたりピンチしたタイミングで regionDidChangeAnimated が呼ばれるので、その時の中心の座標を取得しています。
PHPickerViewControllerを使って画像を選択する
PHPickerViewController を使って画像を選択する方法です。 UIImagePickerController が将来的に非推奨になり PHPickerViewController に置き換わっていくみたいです。 参考: Meet the new Photos picker
SwiftUIでカメラを使う
SwiftUIでカメラを使う方法です。 録画を可能にする CameraView を作成しそれを SwiftUI 側で呼び出すようにします。 SwiftUIでカメラを使ったり、写真を保存するには色々とプライバシーの許可を Info.plist に設定する必要があります。 [Swift] AVFoundation による動画撮影の設定: カメラ種類 / ズーム / 録画時間 / 画質](https://superhahnah.com/swift-avcapture-settings/)
MapViewのタップした箇所に黒丸を描画する
MapViewのタップした箇所に黒丸を描画する方法です。 タップした箇所に黒丸を描画しています。黒丸のサイズは地図に対して相対的ではなく絶対的(地図を拡大すると黒丸も大きくなる)になります。 相対的なものにしたいときはMKPointAnnotationを使うと良いかもしれません。
SwiftUIでListをEditModeにして並び替える
SwiftUIでListをEditModeにして並び替える方法です。 UITableViewのEditModeのようにして並び替えることができます。 Listの中にforを定義する必要があります。最初ハマりました。
Swiftでプロジェクトの中に含まれるJSONファイルを読み込む
Swiftでプロジェクトの中に含まれるJSONファイルを読み込む方法です。 まずプロジェクトに読み込みたい JSON ファイルを追加します。 画像のように追加します。 追加した JSON ファイルの中身は以下です。 { "number": 143, "name": "Snorlax" } 次に追加した JSON ファイルをデコードするためのstructをJSON の中身に合わせて作成します。 ボタンを押すとプロジェクト中の pokemon.json を読み込み、Pokemon構造体にデコードし、State を更新させて文字列を表示しています。
SwiftUIでシートを表示し、プッシュ遷移後にシートを閉じる
SwiftUIでシートを表示し、プッシュ遷移後にシートを閉じる方法です。 遷移後のシートでもisPresentedの情報を保持するのがポイントです。
SwiftUIで初めの画面に遷移する(popToRootViewController)
SwiftUIで初めの画面に遷移する(popToRootViewController)方法です。 isDetailLink がポイントです。
SwiftUIのTextFieldで表示するキーボードを指定する
SwiftUIのTextFieldで表示するキーボードを指定する方法です。 keyboardType を指定することで表示するキーボードの種類を設定することができます。
QGridを使ってCollectionViewを実装する
QGridを使ってCollectionViewを実装する方法です。 iOS13のSwiftUIではCollectionViewに相当するものがありません。 QGridを使うことでCollectionViewに似たものを実装することができます。
SwiftUIでアラートを入れ子にして使うことができない
SwiftUIでアラートを入れ子にして使うことができなかったのでそのメモです。 以下のコードの様に HStack の中に VStack を入れ、それぞれに .alert を使うと内側の .alert がうまく動かなかったです。 .alert は入れ子にしない方が良さそうです。
iOSでGoogle-Mobile-Ads-SDKの8系が入らない
iOSでGoogle-Mobile-Ads-SDKの8系が入らない時の対処法です。 Firebase/adMob を外したらうまくいきました。 参考: pods使うとadmob sdkのバージョンは7.69になるなぁ。最新の8.1入れたかったんだけどな。
SwiftUIでBMIを計算し、結果を別のViewで表示する
SwiftUIでBMIを計算し、結果を別のViewで表示する方法です。 身長と体重を入力し、計算ボタンを押すことで計算したBMIを表示しています。 ただ上の例では bmi と showingSheet の二つのプロパティが必要です。 新しく ContentActionSheetを定義する必要がありますが、以下の方法だとプロパティの数を減らしたりenumの種類によってシートの出し分けをすることができます。
@Stateと@Bindingの使い分け
@Stateと@Bindingの使い分けについです。 @State のついた変数を変更することでViewにその変更が反映されます。 以下の例ではボタンを押すことで 変数textの値を変えています。 変数textの値を変えることでその変更が反映され、文字列が変わります。 @Binding は親のViewのプロパティを子のViewで変えたい時に使います。 ContentViewでは変数textの値を表示しています。 ChangeTextボタンを押してSecondViewに遷移し、そこで値を変えると親である ContentView のプロパティも変更され、画面にその変更が反映されています。
TableViewのセルを長押しでContextMenuを表示する
TableViewのセルを長押しでContextMenuを表示する方法です。 手軽にメニューが表示することができ、とても使い勝手が良いので積極的に使っていきたいです。
SwiftUIで複数のモーダルをEnumで出し分ける
SwiftUIで複数のモーダルをEnumで出し分ける方法です。 enumを使うことでスッキリと書くことができました。 iOS13では使えないので気をつけてください。
SwiftUIでフルスクリーンモーダルを表示する(iOS14以上)
SwiftUIでフルスクリーンモーダルを表示する方法です。(iOS14以上) いままでSwiftUIでフルスクリーンのモーダルを表示するのは大変でしたが、iOS14からはこの方法で表示することができるようになります。お手軽ですね。 iOS13でフルスクリーンモーダルを表示させたい場合はこの記事をご参照ください。 SwiftUIでフルスクリーンモーダルを表示する 参考: How to present a full screen modal view using fullScreenCover()
SwiftUIでモーダルを表示する時に値を渡す
SwiftUIでモーダルを表示する時に値を渡す方法です。 TextFieldでname変数に文字列を入力します。その入力した文字列をPokemonView に渡して表示しています。
Swiftで文字列を圧縮して保存し、そのデータを読み取る
Swiftで文字列を圧縮して保存し、そのデータを読み取る方法です。 zlib というアルゴリズムで文字列を圧縮し、保存しています。 Java の Deflater, Inflater に相当する方法ですが、header、チェックサムの情報が抜けている生のデータが保存されるので気をつける必要があります。 static void saveCompressedData() { try { // Encode a String into bytes String text = "hello"; byte[] data = text.getBytes(StandardCharsets.UTF_8); // Compress the bytes ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); DeflaterOutputStream outputStream = new DeflaterOutputStream(byteArrayOutputStream); outputStream.write(data); outputStream.finish() String path = "/Users/kabigon/Desktop/data.data"; try (FileOutputStream fos = new FileOutputStream(path)) { fos.write(byteArrayOutputStream.toByteArray()); } System.out.println("----------------------"); System.out.println("Save Completed!!"); System.out.println(String.format("Path: %s", path)); System.out.println("----------------------"); } catch (Exception e) { e.
SwiftUIでAVAudioPlayerNodeで音楽を再生し、再生終了を検知する
SwiftUIでAVAudioPlayerNodeで音楽を再生し、再生終了を検知する方法です。 AVAudioPlayer は Delegate で再生終了を検知しますが、AVAudioPlayerNodeは再生終了時に呼ばれるハンドラーが用意されているのでそちらを使います。 参考: AVAudioEngine & AVAudioPlayerNode didFinish method like AVAudioPlayer
SwiftUIでAVAudioPlayerで音楽を再生し、再生終了を検知する
SwiftUIでAVAudioPlayerで音楽を再生し、再生終了を検知する方法です。 SwiftUIは struct を使うので AVAudioPlayerDelegate に準拠することができません。 そのため、ViewModel を作成し、SwiftUI(View)から呼び出してあげるます。 参考: AVAudioPlayerDelegate SwiftUI
SwiftUIで端末のシェイクを検知する
SwiftUIで端末のシェイクを検知する方法です。 端末をシェイクすると Text 内の文字が変わります。 ReactNativeは端末をシェイクするとデバッグメニューが出てくるのが面白いです。
SwiftUIでAppStorageを使ってUserDefaultの値を監視する
SwiftUIでAppStorageを使ってUserDefaultの値を監視する方法です。 UserDefaultが変更されると画面が再描画されます。
SwiftUIでListの中に複数のNavigationLinkを設置する
SwiftUIでListの中に複数のNavigationLinkを設置する方法です。 素直に実装すると画面遷移が暴発してしまいます。 それを修正するために List のタップジェスチャーを無効化したりする必要がありました。
ディレクトリにあるwavファイルをcafに変換する
ディレクトリにあるwavファイルをcafに変換する方法です。ディレクトリに存在する全ての.wavファイルをcafファイルに変換したいときによく使います。
SwiftUIでVStackの周りに影をつける
SwiftでUIViewの周りに影をつける方法です。 ImageのViewの周りに影をつけています。 shadowOffset で影の位置を移動させることができ、サンプルコードでは影を右下に移動させています。
UIPageViewControllerでウォークスルー画面を実装する
UIPageViewControllerでウォークスルー画面を実装する方法です。 ウォークスルー画面はチュートリアルなどでよくありますね。
SwiftUIでViewの周りに影をつける
SwiftでUIViewの周りに影をつける方法です。 ImageのViewの周りに影をつけています。 shadowOffset で影の位置を移動させることができ、サンプルコードでは影を右下に移動させています。
Swiftで文章を読み上げる(音声合成)
Swiftで文章を読み上げる(音声合成)方法です。 AVFoundation を import し、以下のコードを書くことで iPhone に文字列を読み上げてもらうことができます。
SwiftUIでButton内の画像やテキストの色を変えない
SwiftUIでButton内の画像やテキストの色を変えない方法です。 .buttonStyle(PlainButtonStyle()) ではフルーツの一覧を表示しています。 フルーツが表示されたセルを押すと SecondView を設定することで実現できました。
SwiftUIで画面遷移時に値を渡す
SwiftUIで画面遷移時に値を渡す方法です。 ContentView ではフルーツの一覧を表示しています。 フルーツが表示されたセルを押すと SecondView に遷移し、選択されたセルのフルーツ名が表示されます。
GithubのAPIを叩き、SwiftUIでリポジトリを取得する。一番最後までいくと追加で取得しIndicator を表示する
GithubのAPIを叩き、リポジトリを取得する。一番最後までいくと追加で取得しIndicator を表示する方法です。 Infinite List Scroll with SwiftUI and Combine を参考にさせていただきました。
GithubのAPIを叩き、SwiftUIでリポジトリの情報をリストに表示する。一番下までスクロールされたら追加する
GithubのAPIを叩き、リポジトリの情報をリストに表示する。一番下までスクロールされたら追加する方法です。 Infinite List Scroll with SwiftUI and Combine を参考にさせていただきました。
GithubのAPIを叩き、SwiftUIでリポジトリの情報をリストに表示する(Combine)
GithubのAPIを叩き、リポジトリの情報をリストに表示する方法です。 Infinite List Scroll with SwiftUI and Combine を参考にさせていただきました。
GithubのAPIを叩き、SwiftUIでリポジトリの情報をリストに表示する(Closure)
GithubのAPIを叩き、SwiftUIでリポジトリの情報をリストに表示する方法です。 Infinite List Scroll with SwiftUI and Combine を参考にさせていただきました。
SwiftUIでアラートとシートを出し分ける
SwiftUIでアラートとシートを出し分ける方法です。 TextField に入力された文字列が Double に変換できるかチェックします。 もし Double に変換できるのであればシートを表示し、もし Double に変換できないのであればアラートを表示します。
curl で iOSにVoIPプッシュを送る
curl で iOSにVoIPプッシュを送る方法です。 まず VoIPプッシュ通知用の .p12 ファイルを .pem に変換します。 openssl pkcs12 -in file-name.p12 -out file-name.pem -nodes -clcerts .pem ファイルを使ってプッシュ通知を送ります。apple の URL は配布方法によって異なるので気をつけてください。 たとえば Xcode から実機に送ると以下の URL で良いですが、TestFlightやストアから配布する場合は URL 中の develop は不要です。 curl --http2 \ -E file-name.pem \ --header "apns-topic: {YOUR_BUNDLE_ID}.voip" \ -d "{\"message\":\"Hello\"}" \ https://api.development.push.apple.com/3/device/{YOUR_TOKEN}
SwiftUIでプログラムで前の画面に戻る
SwiftUI でプログラムで前の画面に戻る方法です。 NavigationView と NavigationLink を使うと画面遷移することができます。 戻るボタンは自動で付与されますが、戻るボタン意外の方法で前の画面に戻りたいときは、PresentationMode を使うことで実現できます。
Swiftで仮引数を持つイニシャライザをスマートに書く
Swiftで仮引数を持つイニシャライザをスマートに書く方法です。 仮引数がついたイニシャライザをもち、イニシャライズ時の値を定数として保持する Struct を作る時、private(set) var name = “snorlax” を使うと短くスマートに書くことができます。 プロパティが増えてもイニシャライザを編集する必要が無くなります。
Xcodeで行を入れ替える
Xcodeで行を入れ替える方法です。 command + option + [ でカーソルのある行を上に持ってくることができます。 また command + option + ] でカーソルのある行を下に持ってくることができます。 ![Format]](1.gif)
UIAlertControllerでアラートを表示する
UIAlertControllerを使ってアラートを出すサンプルです。 UIAlertControllerStyle.alert を UIAlertControllerStyle.actionSheet にするとニュッと下から出るタイプのアラートになります。
SwiftUIのPreviewを横向きにする
SwiftUIのPreviewを横向きにする方法です。 Previewのサイズを変更することで実現しました。 Landscape Right, Landscape Left にチェックを入れアプリを横向きにします。 Previewのサイズを端末のサイズに変更します。
Buttonからプッシュ遷移をする(NavigationLinkを無効にする)
Buttonからプッシュ遷移をする方法です。 この方法であれば、NavigationLink を擬似的に無効にすることができます。
SwiftUIでNavigationBarを隠す
SwiftUI で NavigationBar を隠す方法です。 .navigationBarHidden(true) を設定すると隠すことができます。 理由は不明ですが、空文字で仮のタイトルを設定する必要がありました。
UIGestureRecognizer でジェスチャーイベントを取得する
UIGestureRecognizer でジェスチャーイベントを取得する方法です。 UITapGestureRecognizer, UIPinchGestureRecognizer, UILongPressGestureRecognizer, UISwipeGestureRecognizer などを使ってスワイプ、ピンチなどのイベントを取得することができます。
UIPickerViewを使って値を選択する
UIPickerViewを使って値を取得するサンプルコードです。 PIPickerViewは選択肢の中から要素を選ぶときによく使いますね。 今回は食べ物とドリンクとフードを選ぶアプリを作ってみました。
削除、セルの移動が可能なUITableViewを作る
削除、セルの移動が可能なUITableViewを作る方法です。 TableViewを使うと簡単に編集可能なTableViewを作ることができます。
よくあるチュートリアル画面をUIPageViewControllerとSwiftUIで作る
UIPageViewControllerとSwiftUIでよくあるチュートリアル画面を作ります。 画面をスワイプすると次の画面が表示されます。
UserDefaults に配列を保存してTableViewに表示する
UserDefaults に配列を保存してTableViewに表示する方法です。 FirstViewController のボタンを押すと UserDefaults に現在の時刻が文字列として保存されます。 SecondViewController を表示すると UserDefaults のデータが読み込まれ、テーブルに表示されます。
UINavigationBar, UITabBar の色を変える
iOSでUINavigationBar, UITabBar の色を変える方法です。 エヴァンゲリオンをイメージしたカラーリングです。今度のエヴァの映画が楽しみです。
UITabBarControllerにUINavigationControllerを入れ子で実装する
UITabBarControllerにUINavigationControllerを入れ子で実装する方法です。 ついでに色もカラフルにしてみました。
SwiftUIでUITestを動かす
SwiftUIでUITestを動かす方法です。 UIKit の時と違って sleep を入れないと良い感じに動かなかったです。 State が変わると際レンダリングが走るせいでしょうか?
SwiftUIで続きを読む。。。ボタンがあるViewを実装する
SwiftUIで続きを読む。。。ボタンがあるViewを実装する方法です。 背景を透明色にし、そのサイズを PreferenceKey で取得することで実現しています。
Swiftで録画開始とスクリーンショットが取られたことを検知する
Swiftで録画開始とスクリーンショットが取られたことを検知する方法です。 画面録画開始前に captureStatusDidChange を実行させることができるのですが、スクリーンショット撮影前に captureStatusDidChange を実行させることはできませんでした。 もしスクリーンショットを取られてしまっては不味いものがある場合、動画であれば DRM を使用したり、サードパーティーの ScreenShieldKit を使用する必要があります。
StoryboardsをiOS13以上のプロジェクトから削除する
Swift & Storyboard でファイルを作成します。 Main.storyboard を削除します。 Main storyboard file base name の項を削除する。 Application Scene Manifest -> Application Session Role -> Item0 -> Storyboard Name を削除する。 SceneDelegate.swift で表示する ViewController を設定します。 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(frame: UIScreen.main.bounds) let viewController = ViewController() window?.rootViewController = viewController window?.makeKeyAndVisible() window?.windowScene = windowScene } 参考 Creating Apps Without Storyboards in iOS 13
TabViewを使って画面を切り替える(SwiftUI)
TabViewを使って画面を切り替えるサンプルです。 かなり簡単に書くことができますね。 TabView - SwiftUI | Apple Developer Documentation
Alamofireで受け取ったJsonをCodableを使ってパースする
お天気Webサービス(Livedoor Weather Web Service) の API を Alamofire から叩き、帰ってきた JSON を struct にパースする方法です。
SwiftUIでStructが使いまわされる
画面遷移をするたびに異なる ID を表示させたかったのですが、それができませんでした。(毎回同じ ID が表示される) onDisappear で id を再生成することで回避しました。 @State に変化が無い場合はキャッシュを使い回したりするということでしょうか? 勉強していきます!!
cURL(curl)でアプリにプッシュ通知を送信する
curl コマンドで iOS端末にプッシュ通知を送信する方法です。 証明書と秘密鍵の両方を含めたpemファイルを作成します。 $ openssl pkcs12 -in xxxx.p12 -nodes -out certificate-and-privatekey.pem curl コマンドでプッシュ通知を送信します。 プッシュペイロード、トピック、デバイストークンは使用している環境のものを使ってください。 また、本番環境(テストフライトなど)と開発環境ではドメイン (https://api.push.apple.com/3/device/ or https://api.development.push.apple.com) が違うことに気をつけてください。 # for 本番環境 $ curl -v -d '{"aps":{"alert":"hello"}}' -H "apns-topic: com.swiswiswift.myapp" --http2 --cert certificate-and-privatekey.pem https://api.push.apple.com/3/device/{your_device_token} # for 開発環境 $ curl -v -d '{"aps":{"alert":"hello"}}' -H "apns-topic: com.swiswiswift.myapp" --http2 --cert certificate-and-privatekey.pem https://api.development.push.apple.com/3/device/{your_device_token}
p12ファイルから証明書と秘密鍵を取り出す
.p12 ファイルから証明書と秘密鍵を取り出す方法です。 AWS SNS を Terraform で書くときに必要でした。 $ openssl pkcs12 -in xxxx.p12 -nodes -nokeys -out certificate.pem $ openssl pkcs12 -in xxxx.p12 -nodes -nocerts -out privatekey.pem ただ、この方法では、ファイルの先頭に NoArgument から始まるテキストが入ってしまいます。 NoArgument が入っても悪さはしないのですが、気になったので消そうとしました。 以下のコマンドを実行すると秘密鍵は NoArgument 無しで変換できました。 証明書はそのテキストを消す方法が見つから無かったのでいったん諦めました。 もし分かりましたら追記します。 $ openssl pkcs12 -in xxxx.p12 -nodes -nocerts | openssl rsa -out privatekey.pem 参考: Push通知の証明書、p12 -> pem変換について
gem でインストールした cocoapods をアップデートする
gem でインストールした cocoapods のバージョンをアップデートする方法です。 cocoapods のライバル?の carthage が気になっています。 gem update cocoapods pod --version
iOSDC Japan 2019のDay1において、ルーキーズLT枠で登壇させていただきました
iOSDC Japan 2019のDay1において、ルーキーズLT枠で登壇させていただきました。 聞いたセッションについてはまた別ブログで。 まとめ ルーキーズLT枠で申し込んでよかったです!楽しかったです! ルーキーズLT 私はルーキーズLT枠で発表させていただきました。 「iOSDCでのトークが初めての方のみ応募が可能な枠」で、基本的なルールは通常のLTと同じです。 この枠で採択されたスピーカーは iOSDC の2-3週間前に開かれる「iOSDCルーキーズLT練習会」に参加することができます。 ルーキーズLT練習会では、運営スタッフの方に発表予定のスライドを添削して頂くことができます。 僕のスライドもたくさん添削していただき、かなり良い感じにして頂きました。 添削の他にも、友達(少なくとも僕からは一方的に思ってます)ができたのもとても嬉しいです。 同期?のような感覚で、iOSDC が終わった後も Twitter で絡んで貰え、とても嬉しいです。 発表 発表はとても緊張しました。発表中の記憶がありません。 プログラミング初心者の僕にいろいろ教えてくださった亀仙的な師匠な人(少なくとも僕からは一方的に(ry)の @tdakakさんや、ルーキーズLTで知り合った人が聞きにきてくれたのがとても嬉しかったです。 また、Twitterをエゴサしたらコメントが何件かありました。 発表のためにWindowsのPCを組んだり、ガジェットを作ったり大変でしたが、発表してよかったです。 発表スライド iOSエンジニアでもできるIoTガジェット作成 基板発注もう何も怖くない まとめ ルーキーズLT枠で申し込んでよかったです!楽しかったです! 事前に添削してもらえますし、友達もできるのでルーキーズLTで申し込んでも良いと思います。 追記 最後のネットワークスタッフの方のLTがとても面白く、カッコよかったです。 僕の本業はインフラエンジニアなので、ネットワーク周りを一年かけてもっと勉強して強くなり、スタッフとして貢献できたら良いなと思いました。時期が来たら応募してみたいです。 ネットワークスタッフの方には「来年に備えて八の字巻き練習しといて!!」と言われました、練習します。
TableViewのセルの高さを変更する(Swift5.0.1)
TableView のセルの高さを変更する方法です。 一括で帰るときは .rowHeight を使い、個別に変えたいときは heightForRowAt を使うと実現できました。 サンプルコードはこちら。 https://github.com/takoikatakotako/swiswiswift-ios
iOSでUITest(E2Eテスト)を行う(Swift5.0)
Swift でUITest を行うサンプルコードです。 左右のテキストフィールドに数字を入れ、ボタンを押すとその積を計算するアプリを作りました。 そしてそのアプリのUITest を実装しました。 参考: 【Swift】初めてのUITest導入
RootViewController をアニメーション付きで切り替える(Swift4.2)
RootViewController をアニメーション付きで切り替えるサンプルコードです。 チュートリアルの後とかでの使用を想定しています。
ローカルのJsonファイルをParseしてテーブルビューに表示する(Swift4.2)
ローカルに追加したJsonファイルをパースし、TableViewに表示するサンプルコードです。 SwiftyJsonなどを使うともっと良い感じにかけますが、今回は使わないで書いてみました。
SwiftでUITestを導入(Swift4.2)
プロジェクトにUITestを追加します。 プロジェクト作成時に作らなかった場合は以下の画像の手順で追加することができます。 @testable import Swiswiswift(Swiswiswiftはプロジェクト名) と書くことで、テストクラスの中から参照できるようになります。 関数名の頭にtestと付けることで、テストとして実行できるようになります。
UITableViewでテーブルにアイテムを表示(Swift4.2)
UITableViewはリストのような形でテキストを表示するクラスです。データ一覧などを表示する時などに役立ちます。 UITableViewのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UIScrollView ↑ UITableView AppleDeveloperリファレンスUITableView
NavigationControllerで画面遷移を行う(Swift4.2)
#Swift4.2 NavigationContorollerのサンプルコードです。 NavigationContorollerは横にニュッと動いて画面遷移をします。
NavigationControllerのRootを切り替える(Swift4.2)
`# Swift4.2` `setViewControllers`でNavigationControllerのRootを切り替えています。
ImagePickerControllerで画像を選択する(Swift4.2)
# Swift 4.2 Swift3の記事はこちら UIImagePickerControllerで画像の選択 iPhoneのフォトライブラリから画像を取得するサンプルプログラムです。 フォトライブラリから画像を選択するために、プロジェクトの info.plistにフォトライブラリを使用する旨を記述します。 これを書いておかないとUIImagePickerControllerは使えません。 キーの値は以下の値を使います。 NSPhotoLibraryUsageDescription TypeはStringでValueの中に使用理由を書きます。 使用理由を書かないと審査の時に落とされるらしいです。
UITableViewの中身をUISearchBarで検索する(Swift4)
#Swift4.2 UITableViewとUISearchBarを組み合わせたサンプルです。 ナビゲーションバーにある虫眼鏡を押すとSearchBarが現れ、そこに文字を入力することで検索結果が表示されます。 Swift3 での記事はこちら
アプリ使用中に位置情報を取得する
#Swift 4.2 アプリ使用中に緯度と経度を取得するサンプルコードです。 端末の緯度と経度が変わるとラベル文字列が更新されます。 参考 [iOS] 位置情報の取得 (Swift3編) 【CoreLocation】位置情報を取得する LocationManagerを使用する場合は、「位置情報を利用する目的」をInfo.plistに記載する必要があります。 起動中のみ位置情報を取得する場合 NSLocationWhenInUseUsageDescription このアプリは、マップで道案内するため、位置情報を取得します 常に位置情報を取得する場合 NSLocationAlwaysUsageDescription åこのアプリは、移動距離取得のため、常に位置情報を取得します 位置情報が変更されるとラベルに文字が表示されます。
Lifesumアプリのインタラクションが素敵だったので再現してみた
#Swift4.2 Lifesumというアプリの登録導線のインタラクションがとても素敵だったので再現してみました。 インタラクションの凄さと登録導線離脱率の相関が気になりますね。
押すとクニュっとするボタンを実装する
#Swift 4.2 押すとクニュっとするボタンのサンプルコードです。 iOSでよくあるマイクロインタラクションです。 僕はマイクロインタラクション大好きなんですが、エンジニアやデザイナーの自己満なんでしょうかね? わからんとです。
SSH で入ることのできるDockerイメージ(Ubuntu14.04)
Ansibleの練習のため、SSHで入ることができるイメージが欲しくて書きました。 CentOS7はこちら CentOS6はこちら 参考 Docker 初心者 — ssh で接続できるサーバーを立てる $ docker build -t ssh_ubuntu14:latest . --no-cache $ docker run -d -p 2222:22 ssh_ubuntu14:latest $ ssh-keygen -R [localhost]:2222 $ ssh -p 2222 kabigon@localhost
Alamofireを使ってAPIからJSONを取得する(Swift4.2)
古い記事(Swift3)は こちら Alamofireを使ってAPIからJSONを取得する #Xcode 10.1 #Swift 4.2 swiftの有名な通信ライブラリであるAlamofireとこれまたSwiftで有名なJSONを扱うライブラリであるSwiftyJSONを使って、 お天気APIから情報を取得するサンプルです。 今回のサンプルでは非同期でJSONを取得し、アラートを表示します。 ATS の設定も必要なのでお忘れなく。
Xcode10でプロジェクト名を変更する
こちらの記事を参考にさせていただきました。 ありがとうございます! 参考記事の方が丁寧に書いてありますので、わからないことがあったら是非そちらを Xcodeでプロジェクト名を変更する方法 (Xcode8.0) 今回は WebRTCHandsOn というプロジェクト名を、simple-video-chat-ios というプロジェクト名に変更します。 1.Xcodeからプロジェクト名を変更する 右側ペインにその詳細が表示されるので「Identity and Type」のNameを新しいプロジェクト名(ここではsimple-video-chat-ios)に修正する。 確認とアラートが出るので、 rename ボタンを押してリネームする。 2.Schemeの変更 画面上部のメニューから「Product」-> 「Scheme」->「Manage Schemes」 を選択します。 アラートが表示されたら左下の 「+」 ボタンを選択し、新しいターゲット(リネーム後のターゲーット)を追加します。 新しいターゲットを追加したら、古いターゲットを削除し、 close します。 3.Podfileの修正 CocoaPodsを使っている場合は、podファイルも修正が必要です。 targetの箇所に新しいプロジェクト名を入力してください。 podfileの修正が完了したら、Podディレクトリを削除し、 もう一度 pod install を行います。 前のプロジェクト名の.workplaceファイルは不要なので削除します。 pod installが終わったら、General の Linked Frameworks and Libraries を開き、半透明になっている古いプロジェクト名のLinkを削除します。 この状態でビルドし、エラーが出ないことを確認してください。 5.ディレクトリ名の修正 最後に手作業でディレクトリ名を新しい名前に修正します。 ディレクトリ名を修正するとXcodeが認識しなくなってしまうので、 Identity and Type で新しいディレクトリを登録します。 info.plist の読込先も間違っているので修正します。 これで完了です! 2019/06/20 追記 リネームを行うとUnitTest, UITest が実行できなくなってしまいました。 Target を一度削除して、作り直すとうまく動作しました。
SafeAreaを取得する
iPhoneXが登場したことで、iPhoneXのレイアウト(SafeAreaの取得)には気を使うようになりました。 SafeAreaはviewDidLayoutSubviews メソッド内で、safeAreaInsets プロパティを参照することで取得することができます。
iOSでバーコードを読み取る
Swiftでバーコードを読み取るサンプルコードです。 Swift 4.1 // 参考にさせて頂いたサイトです Swift 4でQRコードを読み取る AVFoundation(AVCaptureMetadataOutput)でバーコードリーダーを作ってみた まず、info.plistに Privacy - Camera Usage Description のキーを追加し、使用理由を記述します。 「バーコードリーダー読み込みます」などなど。 この文言は使用許可を求める時に表示されます。
流れるように動く背景を実装する
私が作っている4択化学というアプリの背景の実装方法をたまに聞かれるので、それのサンプルコードを書きました。 アプリのアイコン画像がViewの背景を流れます。 またviewDidLoadにアニメーション関係のメソッドを書くと、NavigationBarの遷移によりアニメーションが止まってしまうことがあります。 その場合はアニメーション関係のメソッドをviewWillAppearに書き出すことで解決します。
UITabBarControllerにUINavigationControllerを入れ子で実装する
UITabBarControllerにUINavigationControllerを入れるコードです。 UITabBarControllerにUINavigationBarControllerを入れて実装しています。 新しい記事があります。 UITabBarControllerにUINavigationControllerを入れ子で実装する
UITabBarControllerを実装する
Viewの切り替えに使われるUITabBarControllerを実装サンプルです。 UITabBarControllerのアイコンは30×30の透過pngです。
Asset CatalogでColor Setを使って色を管理する
Xcode9(iOS 11)から、色をAssetで管理することができるようになりました。 UIColorのExtensionを作って色を登録して関数作ったりしてごにょごにょしなくて良くなりました。 色の管理がしやすくなりましたし、デザイナーさんとの連携もちょっとしやすくなったのかな?って思いました。 とても良い機能なんですが、iOS11以上でしか動かないので注意が必要です。 Deployment Targetを11.0以上にしないと警告が出ます。 Assetを開いて右クリック -> 「New Color Set」を選択 ここでは「original」という名前で濃い緑色を登録
Appleのエンジニアさんにコードレベルの質問を送ってみた
「AppleDeveloperの登録料が高すぎる」と友達からよく言われるんですが、高いだけあって良いところもたくさんあります。 その中の一つがTechnical Support Incident(TSI)で、修正できないバグや問題をコードのレベルでAppleのエンジニアさんが質問に答えてくれたり、相談に乗ってくれます。 AppleDeveloperProgramを登録or更新すると2回テクニカルサポートの権利がもらえます。 以前、目覚まし時計のアプリを作っており、その途中で解決できないバグがありました。 具体的には「iPhoneのロック中に通知の音が鳴らない」というもので、シミュレーターでは動くのに、実機ではそのバグが現れます。 自分では解決できなかったため、DTIを使うことにしました。 まず、バグの部分を切り出したXcodeのプロジェクトを作り、githubに上げました。 次に「タイトル」、「バグの説明」、「再現手順」、「(リリース済みアプリの場合は)App NameとApp ID」を英語で書き、アカウントページの Code-Level Support のフォーム(https://developer.apple.com/account/?view=support)から送りました。 すぐに自動返信メールがくるので、そのメールにバグの部分を切り出したXcodeのプロジェクト(github に上げたものと同じもの)を添付して返信しました。 2日後にAppleのエンジニアさんから返事が届きました。 「Xcodeプロジェクトと再現手順ありがとう!君の手順どうりにやったんだけど、僕の環境ではバグは出なかったよ。他の端末でチェックしてみて」といった内容で、妻と友達の端末を借りて動かしたらちゃんと動きました。 僕のiPhoneが壊れていたみたいです。。。orz つまらないオチですが、Appleのエンジニアさんが実際にコードを動かして試してくれるのはとてもありがたく、本当に詰まった時はありがたいなと思いました。 それでは良いSwiftライフをーー! AppleDeveloper -テクニカルサポートのリクエスト- https://developer.apple.com/jp/support/technical/
UIViewの背景をグラデーションさせる
UIViewの背景をグラデーションさせるサンプルコードです。 参考にさせていただいたページ 【Swift x iOSアプリ開発】Viewの背景色にグラデーションを設定する方法 Swift UIViewの背景をグラデーションさせる方法 -iPhoneアプリ開発-
カスタムボタンクラスを実装する
UIButtonを拡張したカスタムボタンクラスを作成して貼り付けるサンプルコードです。 見た目を別ファイルに切り分けることでViewControllerがすっきりします。
TableViewを編集してCellを削除する
TableViewを編集してCellを削除するサンプルコードです。 NavigationBarに編集ボタンを追加し、そのボタンを押すことでセルを削除することができます。 NavigationControllerについてはこの記事を参考にしてください。 NavigationControllerを実装する
TableViewを編集してCellを削除する(横スライド)
TableViewを編集してCellを削除するサンプルコードです。 以下の関数を追加することで、セルを横スライドで削除できる機能を付けることができます。 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
数字を三桁ごとにカンマ区切りにする(日本円の表示)
日本円を表示するときのように3桁ごと,で区切る方法を調べてみました。 123,456,789円 みたいな感じです。 参考に指せて頂いた記事 [Swift]数字を三桁ごとにカンマ区切りにする
現在の日付と曜日、現在時間を取得する
Swift4.1で現在の日付と曜日、現在時間を取得するサンプルコードです。 以下の形式の文字列で取得してくれます。 2018/04/03 (木) 19:03:34 上のような形式で取得するサンプルコードです。 Calendar.currentで取得すると、設定によっては和暦(平成〇〇年)で取得してしまう可能性があるので(2018/04/03が欲しいのに30/04/03が帰ってくる)、グレゴリオ暦で取得する方が無難です。 逆に和暦が欲しいときは和暦で取得する方法もあります。 このサイトが詳しいです。 Swift 3 の日時操作チートシート その他参考にさせていただいたサイト Swift3での日時に関する処理 【Swift3】現在時刻の取得とDataFormatterでの文字列化
CustomTableViewCellとaccessoryViewを使ってTableVIewのレイアウトをカスタマイズ
CustomTableViewCellを作ると好きなレイアウトのCellをTableViewで使うことができます。 そしてTableViewCellのアクセサリービューにはUISwitchやチェックマークなどのアクセサリをつけることができます。 今回はその両方を使ったサンプルコードです。 参考にさせて頂いたウェブサイト [Swift]UITableViewCellのaccessoryViewでaccessoryButtonTappedForRowWithIndexPathが来ない件の対応
文字列やURLからQRコードを生成する
文字列やURLからQRコードを生成するサンプルコードです。 This is a sample code that generates a QR code from a character string or URL. これらの記事を参考にさせていただきました。 CIImageをData型に変換したときにハマった時の対処法(Swift3.0) SwiftでQRコードを生成してみた 生成したQRコードはこちらです。
UIAlertControllerでアラートを表示する
UIAlertControllerを使ってアラートを出すサンプルです。 UIAlertControllerStyle.alert をUIAlertControllerStyle.actionSheet にするとニュッと下から出るタイプのアラートになります。
UIAlertControllerで下からニュッと出す(UIActionSheet)
下からニュッと出てくるアラートはUIAlertControllerを用いて実装します。 遥か昔、下からニュッと出てくるアラートはUIActionSheetなんて呼ばれている時期もありましたが、UIAlertControllerに統合されました。
iPhoneアプリのプログラミングの勉強法
「iPhoneアプリを作るには何から勉強したらいい?」と友達にちょくちょく聞かれるのでオススメの勉強法をまとめてみました。 iPhoneアプリの勉強方に王道が無いと思いますが、良かったら参考にしてください。 1.書籍で勉強する まずはじめに書籍で勉強することをオススメします。 Webページは見返すことが難しかったり、情報が古かったりすることが多いので、やはり初めに書籍を写経することを勧めます。 最近の本はどれも良い本なので、どれを買っても良いと思いますが、以下の本が特にオススメです。 また、書籍は環境に合わせたもの(可能であれば新しいもの)を買ってください。 Swift4でだいぶ落ち着いてきたのですが、Swiftの書き方とXcodeのUIはバージョンでだいぶ異なります。 初めてXcodeに気をつけてください。 2.アプリをリリースしてみる 「いきなりかよ!」と思うかもしれませんが、書籍で勉強したらアプリをリリースしてみることをオススメします。 初めてのアプリなので、本当に簡単なもの、書籍のアプリを少し手を加えたものを作り、リリースします。(実際にリリースしなくても審査には出す) あまりに簡単なアプリは審査でリジェクトされてしまうので、一捻りを加えたアプリを出しましょう。 開発者の登録や、審査など苦しむことも多いですが、とても勉強になります。 「こういう機能はどうやって実現したら良いの?」みたいな質問は大歓迎です。 気軽にコメント欄にご記入ください。(ブログのネタ不足で困っています。。。) 3.Cocoa Podsを覚える、ライブラリを使う iOSアプリ開発用にPodsと呼ばれるライブラリ管理ツールがデファクトスタンダードです。 gemやnpmやHomeBrewに近いのかもしれません。 ライブラリを入れるとカッコいいUIが簡単に作れたり、通信周りの処理が楽になったりします。 何か参考になりましたら幸いです。
UserDefaultsを使ってパラメーターを保存する
UserDefaultsはアプリを落としても保持しておきたいデータを保存するときに使います。 使い方はいたってシンプルです。 サンプルコードでは、まず最初に userDefaults.register(defaults: ["KEY_LabelText": "Hello"]) で初期値を設定しています。 .register() はとても便利で、指定したキーに対応するデータが存在しない場合に、初期値を入れてくれます。 次にラベルにUserDefaultで保存した値を読み取り、ラベルのテキストに反映。 そしてボタンを押されたらuserdefaultsとラベルの値を更新しています。
UIPickerViewを使って値を選択する
はいどーも! UIPickerViewを使って値を取得するサンプルコードです。 PIPickerViewは選択肢の中から要素を選ぶときによく使いますね。 今回は食べ物とドリンクとフードを選ぶアプリを作ってみました。 新しい記事は こちら AppleDeveloperDocuments UIPickerView
カスタムレイアウトを持つコレクションビューをつくる
今作成しているアプリに画像が入れ子となったデザインをつくることになったので、実装方法について調べました。 主なコードは以下のサイトを参考にさせていただきました。 本当にありがとうございました。 Swift2->4の変換は大変でした。。。 iOS UICollecionViewFlowLayout でカスタムレイアウトを作ろう ~ Swift版
SwiftでUDP通信を行い、文字列を送る
SwiftでUDP通信するメモです。 SwiftSocket をcocoapodsで入れて、こんな感じで書きました。 woom-02と通信するのに使いました。
Swift3からSwift4への移行時に出る@objc inference warningsを消す
Xcode8からXcode9へ乗り換えてSwift4へ変換すると以下のエラーが出ます。それの消し方です。 The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "TargetName" target. 各ターゲットを選択 -> Build Settings -> 検索窓で inference と検索 -> Swift @objc inference を Default に設定する 他にもターゲット(UITest,UnitTest)がある場合はそれも Default に設定する。
UINavigationControllerの戻るボタンの戻るを消す
UINavigationControllerの戻るボタンの文字を消します。 「<戻る」を「<」にします。 let backButton = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) self.navigationItem.backBarButtonItem = backButton self.navigationController?.pushViewController(picDetailView, animated: true)
UICollectionViewにCustomセルを追加する
UICollectionViewにCustumCollectionセルを追加してみました。 クラス名を文字列に変換する NSStringFromClass(CustumCollectionViewCell.self) は、UITableViewやUICollectionView を使うときにとても便利です。
UICollectionView
新しい記事 があります。 UICollectionViewのサンプルです。 UICollectionViewを使う を参考にさせていただきました。 このサイトは見やすくて、swiftをやる人にとてもオススメです。 makeColor() 関数でランダムに生成した色をセルに入れています。 スクロールするたびに色が変わります。
輸出コンプライアンスのウィザードをスキップする
アプリをTestFlightなどに提出すると、暗号化が含まれていないか聞かれます。 毎回聞かれるとスキップしたくなります。 Info.plist の ITSAppUsesNonExemptEncryption を NO にするとスキップすることができます。
Alamofireを使ってAPIからJSONを取得する
新しい記事(Swift4)はこちらAlamofireを使ってAPIからJSONを取得する(Swift4.2) swiftの有名な通信ライブラリである Alamofire とこれまたSwiftで有名なJSONを扱うライブラリであるSwiftyJSONを使って、お天気API から情報を取得するサンプルです。 今回のサンプルでは非同期でJSONを取得し、アラートを表示します。
delegateで別のViewからメソッドを呼び出す
あるViewから他のViewControllerにある関数などを実行するデリゲートのサンプルです。 今回はモーダル表示したViewから、元々いたViewの背景色をデリゲートを使って変えています。
Swiftでクラス名と関数名と行番号を取得、表示する
「ここは動いたらヤバい!」的な箇所に書くとでデバックが捗ります。 クラス名と行番号、取得表示することができます。 print("Class name : \(NSStringFromClass(type(of: self))) ") print(#function, #line)
UIImagePickerControllerで画像の選択
iPhoneのフォトライブラリから画像を取得するサンプルプログラムです。 フォトライブラリから画像を選択するために、プロジェクトの info.plist にフォトライブラリを使用する旨を記述します。 これを書いておかないとUIImagePickerControllerは使えません。 キーの値は以下の値を使います。 NSPhotoLibraryUsageDescription Typeは String でValueの中に使用理由を書きます。 使用理由を書かないと審査の時に落とされるらしいです。 下の画像のような感じです。 コードは以下のようになります。
UIStatusBarを白くする
UIStatusBarを白くする方法についてです。 UIStatusBarを白くする方法その1 UIStatusBarを白くする方法その1です。特定のViewControllerを白くする方法です。白くしたいUIViewControllerに書きます。 NavigationController以下にあるStatusBarはこの方法では白くはなりませんので注意してください。 UIStatusBarを白くする方法その2 全てのStatusBarを白くする方法です。 プロジェクトのターゲットのinfoに[Status bar style]と[UIStatusBarStyleLightContent]、[View controller-based status bar appearance]と[NO]を追加します。NavigationController以下にあるStatusBarも白くなります。 わかりやすいようにViewの背景色をオレンジにしています。
UITableViewとUISearchBar
UITableViewとUISearchBarを組み合わせたサンプルです。 ナビゲーションバーにある虫眼鏡を押すとSearchBarが現れ、そこに文字を入力することで検索結果が表示されます。 UITableView 基本的なテーブルビューの例文を以下に示します。
UserNotification(LocalNotification)
UserNotificationはユーザーに対して通知を発行する時に使用します。 UserNotificationは大きく分けて二種類あり、外部から通知を発行できるRemoteNotification(LineやTwitterのような通知)とLocalNotification(時計アプリなどの内部的に発行する通知)があります。 ここではLocalNotificationを取り扱います。 UserNotificationサンプル 初めにオリジナル通知音の発行に使用する音データ(.cafファイル)をプロジェクトに登録します。 .caf ファイルをプロジェクトに追加し、BundleResoucesに登録されていることを確認します。 また使用したcafファイルはこちらです。 UserNotificationの仕様として、使用するオリジナル通知音に不具合がある場合、デフォルトの通知音が再生されます。
音声認識(SFSpeechRecognizer)
iOS10からSpeech Frameworkが登場しました。 ここではSFSpeechRecognizerを使って音声認識をしてみようと思います。 そしてシミュレーターでは動かないから気をつけてください。 参考: AppleDeveloper:SpeakToMe: Using Speech Recognition with AVAudioEngine 参考: あたも開発ブログ 参考: 【iOS 10】Speechフレームワークで音声認識 – 対応言語リスト付き プライバシー設定をinfo.plistに記入 iOS10になってから、プライバシーに関する機能(通知、カメラ、フォトライブラリへのアクセス)を使う際に、Info.plistにあらかじめ使うことを書いておかないとアプリが落ちてしまうようになりました。 音声認識機能を使う場合は以下のプライバシー設定を行う必要があります。 参考: アプリ開発ブログ(仮) info.plistを開き、Privacy – Speech Recognition Usage DescriptionをStringで追加し、右側に使用目的を記入します。 Privacy – Microphone Usage Description to practice programingもまたStringで追加し、右側に使用目的を記入します。 使用目的が書かれていないと審査で落とされるらしいです。 サンプルコード 音声認識の結果をAlertで表示するプログラムです。
UITextField
UITextFieldは文字の入力に使われます。 UITextFieldのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UIControl ↑ UITextField AppleDeveloperリファレンスUITextField UITextField例文 UITextField、生成し、ボタンが押されるとUITextFieldから文字列を取り出してラベルにコピーします。
cafファイルの作成
.cafファイルはiOSに用いられる音声ファイル形式です。以下はwavファイルを同名で出力するコマンドです。 afconvert -f caff -d ima4 ファイル名.wav
UINavigationBar
iOSアプリの画面上部によく使われているUINavigationBarについてです。 UINavigationBarのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UINavigationBar AppleDeveloperリファレンスUINavigationBar UINavigationBar例文 UINavigationBarを生成し、タイトルとボタンを付けます。
UILabel
UILabelクラスは文字表示を管理するクラスです。画面に文字を表示させたい時に使用します。 UILabelのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UILabel AppleDeveloperリファレンス UILabel UILabelサンプル サンプルコード UILabelのカスタマイズ UILabelにタッチイベントを実装 参考: [Swift2.0] UILabelとUIImageViewのタップイベント処理を実装する
UITableView
UITableViewはリストのような形でテキストを表示するクラスです。データ一覧などを表示する時などに役立ちます。 UITableViewのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UIScrollView ↑ UITableView AppleDeveloperリファレンスUITableView UITableView 二つのグループの場合です。
UIButton
UIButtonクラスはボタンを設置するためのクラスです。 ボタンタップでアクションを起こすことができます。 UIButtonのクラス階層 NSObject ↑ UIResponder ↑ UIView ↑ UIControl ↑ UIButton AppleDeveloperリファレンスUIButton UIButton例文 様々なUIButtonのサンプルです
UIBarButtonItem
UINavigationBarの要素追加、カスタマイズに用いられるUIBarButtonItemについてです。 UIBarButtonItemのクラス階層 NSObject ↑ UIBarItem ↑ UIBarButtonItem AppleDeveloperリファレンスUIBarButtonItem UIBarButtonItem例文 UINavigationBarを生成し、タイトルとボタンを付けます。 UIBarButtonItemの色の変更 UIBarButtonItemはデフォルトでは青色ですが、以下の方法で色を指定することができます。 Change color of Back button in navigation bar //ナビゲーションボタンの色を変更する UINavigationBar.appearance().tintColor = UIColor.black UIBarButtonSystemItem UIBarButtonSystemItemを用いることで、デフォルトに入っているボタンを使用することができます。 https://developer.apple.com/reference/uikit/uibarbuttonsystemitem //barButtonSystemItem:に [.add]を設定することで[+]ボタンを設定する,上のコード参照 let leftNavBtn = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(leftBarBtnClicked(sender:))) Add Done Cancel Edit Save Compose Reply Action Organize Bookmarks Search Refresh Stop Camera Trash Play Pause Rewind Undo Redo PageCurl