Xcode」カテゴリーアーカイブ

【Swift5】ディクショナリ等に入れるDate型の初期値の設定が面倒。

タイトルのままですが、[String:Any]等で、AnyにはString型Bool型Int型等ダイレクトに入力できる物が多いのですが、Date型も入れれないのかと考えてみました。
結局よくわからず、String型で日時を作ってDateFormatterを設定してDate型に変換してから出ないと無理っぽい感じでした。

なのでやったことの忘備録です。

こんなんでます。

ちょいとめんどいですね。

【Swift5】アプリがバックグラウンドに入った時の処理。

なんか以前はappDelegateを使ってたよーな気がしたんだけど調べ直してみた。

抜粋なんで動かんかったらすまん。
こんなんで動くと思う。/(^o^)\

【Swift5】pickerViewを2つ(以上)とdatePickerを設置して下から出るようにする。

定期的にpickerViewのこんな記事を書いている気がします。(^_^;)
pickerViewはよく使うけどアプリをたまにしか作らないのでその間にSwiftのバージョンも上がるし作り方も忘れるよね。

同じViewContorollerに2つ以上のPickerViewを設置し、datePickerも使って、しかも普通のキーボードのように下から出るようにしたい。
それに少し前の記事を参考に閉じるボタンも付けます。それは下記参照。
【Swift5】textFieldのキーボードに閉じるボタンを付ける。 | iPhoneアプリ備忘録

ではまず、3つのtextfieldを作成します。
autoLayoutは適当に。
スクリーンショット 2020-04-11 11.06.09

textfieldはそれぞれあうとれっとせつぞくします。
pickerViewのプロパティを2つと、datePickerのプロパティを作り、pickerViewに表示する配列も作成します。

UIPickerViewDelegate, UIPickerViewDataSourceを設定するとプロトコルに従いメソッドが作成されます。
UITextFieldDelegateも書いておきましょう。
とりあえずここまでのコード。

そして、プロトコルは置いといてキーボードをpickerViewに置き換える辺りの設定します。
基本的にはPickerViewにtagを設定し、textfieldのinputViewに設定します。
datePickerも同様に。
viewDidLoadから呼びます。

pickerViewのプロトコルの設定。
コンポーネントの数は1でコンポーネントに入る配列の数はtagで切り分けます。
コンポーネントの中身、配列もtagで切り分け。

pickerViewとdatePickerViewに変更があった時に呼ばれてtextFieldのテキストが書き換えられるメソッド。

いちおこれで完成。
IMG_6322

一応全コード

【Swift5】scrollViewを使って画面下にあるtextfieldがキーボードで隠れないようにした。

入力フォームなどで縦に長くなった時、下の方のtextFieldがキーボードに隠れて困ることがよくあります。
それを解消しました。
前回の記事のようにscrollViewとstackViewを使っている場合に便利です。

参考サイト
Swift:TextFieldが隠れちゃうのをなんとかする!|プログラミング初心者のプロへの道
UITextFieldを使用する時に必要なあれこれ – Qiita
[Swift4]複数のTextFieldがキーボードに隠れて入力できない時の対策 – あなたにフィット

上記2つのサイトを参考にSwift5で簡単に書いてみます。

まずは前々回の記事を参考にscrollView – stackView – view – textfieldという階層を作ります。
【Swift5】縦長のスクロール画面をscrollViewとstackViewを使って作ると便利だった。改訂版 | iPhoneアプリ備忘録
わかりやすくViewの色を塗り分けておきます。
スクリーンショット 2020-04-10 21.03.20

0vz6x-pfv2f

あと、前回の記事を参考にキーボードを閉じるボタンも付けておきます。
【Swift5】textFieldのキーボードに閉じるボタンを付ける。 | iPhoneアプリ備忘録

このままだとスクロールはしますが一番下の青のtextfieldに入力しようとしても隠れて見えません。
キーボードが出た時にキーボードの高さ分だけスクロールビューを動かします。
以下コード

こんな感じになります。
2hafl-4l5jh

【Swift5】textFieldのキーボードに閉じるボタンを付ける。

textFieldのキーボードに閉じるボタンを付けたいときがあります。

参考サイト
swiftで閉じるボタンのついたキーボードを表示するUITextFieldクラスの作成 – Qiita

ほぼ劣化コピペです。
元サイトがなくなったら困るので自分用です。
不都合があれは削除します。(-人-)

UITextFieldのカスタムクラスになります。
以下のコードをコードの最後に追記。

そして適用したいtextFieldのidentity Inspectorでcustom classをDoneTextFierdに変更する。
スクリーンショット 2020-04-10 21.23.40

これでDone付きのキーボードが出るようになります。
スクリーンショット 2020-04-10 21.28.12

【Swift5】縦長のスクロール画面をscrollViewとstackViewを使って作ると便利だった。改訂版

【Swift4】縦長のスクロール画面をscrollViewとstackViewを使って作ると便利だった。 | iPhoneアプリ備忘録

上記ページのやり方でスクロールビューを作ってるとエラーが出た。
Xcode11でInterface Builderの仕様が変わったらしい。
参考サイト
Xcode11のIBに追加されたContentLayoutGuideとFrameLayoutGuideについて – Qiita

なので改訂版です。
旧ページの画像を使ったりするので整合性がなかったらご指摘ください。/(^o^)\

まず、Safe AreaにScroll Viewを配置します。
Add New Constraintsで上下左右全てのマージンを0とします。
スクリーンショット 2019-01-06 20.41.39

このようなエラーが出ますが続けます。
スクリーンショット 2020-04-03 12.29.31

次いで、そのScroll Viewの中にVertical Stack Viewを配置し、Add New Constraintsで上と左右のマージンを0とします。
スクリーンショット 2020-04-03 13.19.10

ここでXcode11から変更された「Content Layout Guide」を使用します。
現状ではScrollViewの幅と高さが決まっていないためエラーになっています。
なのでStack ViewからContent Layout Guideへ右ドラックで接続しEqual Widthsを選択します。スクリーンショット 2020-04-03 12.30.10

スクリーンショット 2020-04-03 12.31.06

同様にEqual hightsも接続します。
スクリーンショット 2020-04-03 12.31.21

幅は画面幅で設定されるのですが高さが決まらないためエラーが出てますが、Stack Viewに子ビューを入れて高さを決定するとエラーが無くなります。
スクリーンショット 2020-04-03 13.51.43

スクリーンショット 2020-04-03 14.01.41

縦長な画面でテストします。
操作するViewを選んで、simulated sizeを「freeform」にして、heightを設定します。
とりあえず1200にしてみました。
スクリーンショット 2019-01-06 20.51.30

StackViewに高さが200の子Viewを6個入れて分かりやすように色を付けてみました。
スクリーンショット 2019-01-06 21.04.34

これでアプリを起動すると綺麗にスクロールしました。\(^o^)/
zuhqs-9xva4

これだけのことがコードを一行も書かずにできるってすごいなーと思います。\(^o^)/

【Swift5】localeの泥沼【ロケール】

時計や日付関係をイジっててLocaleがよくわからんかった。

言語設定?地域設定(書式設定?)?そのへんがごちゃごちゃです。
それぞれお互いに影響しているようで、地域設定が同じでも言語設定が変わると表記順が変わったり、
言語設定が同じでも地域設定で表記が変わったりします。
よーわからん。

とりあえず参考サイト
iOS11で変わったロケール – Toyship.org
iOS9から変わったNSLocale.preferredLanguagesの対応を考える – Qiita

重要だと思ったのは、本体の言語設定と地域設定以外に、「アプリ側の多言語対応」(Localized)も関係しているようです。
ややこしい。

以下のコードでいろいろ呼び出せるようです。
新規プロジェクトで試してみました。

デバッグエリアでは

といった感じです。
本体の言語設定だけ取り出すんはどしたらええんや、
あと、間に入るのはハイフンなのかアンダースコアなのか。。。

おまけ。
いろいろといじってるとコンナン出てきた。

これを動かすとデバッグエリアでは

こんな感じです。
1つ目はよく使われる組み合わせかな?
次の2つは言語設定と地域設定それぞれだろうね。
下の2つ通貨コードっぽいですね。
何かの参考になれば。

もひとつオマケの参考サイト
ロケールのリージョンコード | Second Flush

【Swift5】UIPickerViewで2列のピッカーを作る。

UIPickerViewで2列のを作りたかったのですがやり方が分からず少し悩みました。

UIPickerViewの参考サイト
【swift】UIPickerViewを作ってみる(ドラムロール)|株式会社イーガオ
[iPhone] UIPickerView の基本的な設定

特に指定せずとも、一列目がcomponentが0で、二列目が1で良いようです。

簡単にラベル2つとUIPickerViewを配置します。
スクリーンショット 2019-04-07 20.19.07

Classに UIPickerViewDelegate, UIPickerViewDataSource を追加して、
それぞれ
pickerView.delegate = self
pickerView.dataSource = self
でつなぎます。
あとは列数は2,行数と、タイトルと、選択時の動作はswitchのcomponentで分岐します。
以下コード。

switch文のdefaultは適当です。
動かすと味気ない画面ですがちゃんと動きます。
スクリーンショット 2019-04-07 20.27.35

二列ではなく、画面に複数のUIPickerViewを使いたいときはtagを使うと良いようです。

【Swift4】レビューのリクエストをする。

アプリを使っていると時々突然にアプリの評価を求められることがある。
あれって結構便利ですね。

apple純正で簡単に追加できるので利用してみた。

参考サイト。
SKStoreReviewController まとめ – Qiita

基本的な使い方は、適当なタイミングで

これだけで良いらしい。

ただ、
・年に3回までしか表示されない。
・3回に満たないときは呼ばれたらほぼ必ず表示される。
らしい。

なので適当なタイミングで呼ばれるように考えてみた。

100回呼ばれるごとにSKStoreReviewControllerを呼び出す。
但し、最初はしばらく使った30回目くらいでレビューをリクエストしたいので初期値を70にする。
これをviewDidLoadあたりに入れておけば、一日一回起動するなら年に3回程度になるかなという計算。

まあべんりだ。

【Swift4】【AdMob】【Stack View】広告を消したり表示したりする。

Stack Viewを使うと広告が表示されないときの処理が便利だった。
Stack Viewについては以前に書いたページを参照。
【Swift4】縦長のスクロール画面をscrollViewとstackViewを使って作る。
【Swift4】UITableViewの基本のき。

スクロールビューにスタックビューを入れていたり、高さの制限をかけていないビュー(テーブルビュー等)と一緒にスタックビューを使っていると、バナービューをisHiddenにすると綺麗にトルツメされるのですごく便利。

バナービューの状態の取得などについては下記サイトを参照。
バナー広告  |  iOS  |  Google Developers

GADBannerViewDelegateと、
bannerView.delegate = selfを、
設定しておけば広告リクエストの状態が受け取れます。
それを利用してバナービューの表示非表示を決めます。

先に、Storyboardでバナービューのishiddenにチェックを入れておくと広告を受け取った時点でバナービューが表示されます。

以下サンプルコード。