カテゴリー別アーカイブ: Xcode

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

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

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

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

まずは前々回の記事を参考にscrollView – stackView – view – textfieldという階層を作ります。
【Swift5】縦長のスクロール画面をscrollViewとstackViewを使って作ると便利だった。改訂版 | iPhoneアプリ備忘録
わかりやすくViewの色を塗り分けておきます。
【Swift5】scrollViewを使って画面下にあるtextfieldがキーボードで隠れないようにした。

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

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

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

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

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

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

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

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

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

そして適用したいtextFieldのidentity Inspectorでcustom classをDoneTextFierdに変更する。
【Swift5】textFieldのキーボードに閉じるボタンを付ける。

これでDone付きのキーボードが出るようになります。
【Swift5】textFieldのキーボードに閉じるボタンを付ける。

【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を配置します。
【Swift5】UIPickerViewで2列のピッカーを作る。

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

switch文のdefaultは適当です。
動かすと味気ない画面ですがちゃんと動きます。
【Swift5】UIPickerViewで2列のピッカーを作る。

二列ではなく、画面に複数の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にチェックを入れておくと広告を受け取った時点でバナービューが表示されます。

以下サンプルコード。

【Swift4】【Firebase】【AdMob】と【Analytics】(4) AdMobを設定。

前々々回
【Swift4】と【cocoaPods】で【Firebase】の【adMob】と【Analytics】をインストール | iPhoneアプリ備忘録
前々回
【Swift4】【Firebase】のプロジェクトを作成。【adMob】と【Analytics】の準備。 | iPhoneアプリ備忘録
前回
【Swift4】【AdMob】で新しいアプリIDとユニットIDを取得する。 | iPhoneアプリ備忘録
からの続きでAdMobを設置します。

今回はバナーを作成。
テスト用のアプリIDとユニットIDを使用します。

参考サイト
バナー広告  |  iOS  |  Google Developers

StoryboardでViewを配置して
①サイズを幅320高さ50に設定。
【Swift4】【Firebase】【AdMob】と【Analytics】(4) AdMobを設定。
【Swift4】【Firebase】【AdMob】と【Analytics】(4) AdMobを設定。

②Aspect Ratioにちぇっく。
③④下と左右に0ポイントでConstraint
【Swift4】【Firebase】【AdMob】と【Analytics】(4) AdMobを設定。

これで、320:50の比率でのバナーで画面の真下につくサイズのビューができる。
【Swift4】【Firebase】【AdMob】と【Analytics】(4) AdMobを設定。

このビューを選択し、identify Inspector で、Custom ClassのGADBannerViewを選択する。
【Swift4】【Firebase】【AdMob】と【Analytics】(4) AdMobを設定。

これをViewControllerに接続すると、

とゆーかたちでアウトレット接続ができる。

あとはFirebaseをインポートして、
ユニットIDを設定して、
rootViewControllerに接続して、
広告をロード(リクエスト)したら、
広告が表示される。

コードはこんな感じ。

アプリを起動するとこんな感じ。
【Swift4】【Firebase】【AdMob】と【Analytics】(4) AdMobを設定。

delegateの設定やらさらに便利な使い方もあるけど、基本はここまで。
うじゃうじゃ。

【Swift4】【Firebase】【AdMob】と【Analytics】(3) AdMob用に新しいアプリIDとユニットIDを取得する。

前々回
【Swift4】と【cocoaPods】で【Firebase】の【adMob】と【Analytics】をインストール | iPhoneアプリ備忘録
前回
【Swift4】【Firebase】のプロジェクトを作成。【adMob】と【Analytics】の準備。 | iPhoneアプリ備忘録
からの続きでAdMobのアプリIDとユニットIDを取得します。

AdMobはアプリごと、広告枠ごとにIDをつくって使用します。
そのやり方。

まずAdMobのアプリのページに行く。
Google AdMob

アプリを追加を選択。
【Swift4】【Firebase】【AdMob】と【Analytics】(3) AdMob用に新しいアプリIDとユニットIDを取得する。

公開済みかを選択。
まだならまだで大丈夫。
【Swift4】【Firebase】【AdMob】と【Analytics】(3) AdMob用に新しいアプリIDとユニットIDを取得する。

アプリ名とプラットフォームを選択。
 【Swift4】【Firebase】【AdMob】と【Analytics】(3) AdMob用に新しいアプリIDとユニットIDを取得する。

アプリがAdMobに追加されました。
【Swift4】【Firebase】【AdMob】と【Analytics】(3) AdMob用に新しいアプリIDとユニットIDを取得する。

次の広告ユニットを作成に進みます。
まずは広告フォーマットを選びます。とりあえずバナーで。
【Swift4】【Firebase】【AdMob】と【Analytics】(3) AdMob用に新しいアプリIDとユニットIDを取得する。

広告ユニットを設定します。
ユニット名はアプリ名も含めたほうがわかりやすいかも。
詳細設定も気になるようならいじります。
【Swift4】【Firebase】【AdMob】と【Analytics】(3) AdMob用に新しいアプリIDとユニットIDを取得する。

これでアプリIDとユニットIDが完成です。
【Swift4】【Firebase】【AdMob】と【Analytics】(3) AdMob用に新しいアプリIDとユニットIDを取得する。

スタートガイド  |  iOS  |  Google Developersを参考に設定しましょう。

【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。

iPhoneアプリにFirebaseのAnalyticsとadmobを入れるために、firebase上でiPhoneアプリのプロジェクトを作成する。

前提としてFirebaseにログインできていること。
まずはFirebaseのコンソールでプロジェクトを追加します。
プロジェクトとアプリが連携できると自動でアナリティクスが開始されるようです。
Firebase console

↑Firebaseコンソールでプロジェクトを追加を選択。
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。

iosを選択
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。

アプリのバンドルIDを入力
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。

GoogleService-Info.plistが作成されるのでダウンロードしてXcodeプロジェクトに追加。
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。
copy item if neededを選びましょう。
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。

cocoapodを使ってfirebase SDKを導入する。
この辺は前回やったやつ。
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。

AppDelegateにコードを追加して接続。
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。

アプリを起動して接続が確認されると、
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。
ここが、
【Swift4】【Firebase】【AdMob】と【Analytics】(2) 準備。プロジェクトを作成。
こうなる。

これでFirebaseとの接続が完了してAnalyticsが確認できるようになる。

【Swift4】【Firebase】【AdMob】と【Analytics】(1) SDKを【cocoaPods】でインストール

【cocoapods】たまにしか使わないのですぐにわからなくなる。/(^o^)\ | iPhoneアプリ備忘録
前回↑から引き続きFirebaseのadMobを入れていきます。

参考サイト
iOS 用 Firebase 向け Google アナリティクスを使ってみる  |  Firebase
スタートガイド  |  Firebase

ってゆーかよく見直したらSwift3で似たような記事書いてる。/(^o^)\
【Swift3】と【cocoaPods】と【Firebase】と【adMob】 | iPhoneアプリ備忘録

ただこのあとにpodfileの書き方が変わってる。
【CocoaPods】Podfileの書き方が変わっていた。 | iPhoneアプリ備忘録

それらを参考にPodFileを書き換えます。

pod ‘Firebase/Core’
pod ‘Firebase/AdMob’
上記を追加しています。

で、保存したあとターミナルからインストールします。
Podfileのあるディレクトリを間違えないようにね。
で、

結果↓

とゆーことでFirebaseとAdMobが入りました。

xcodeでプロジェクトを開くときは、.xcodeprojファイルではなく、
新しく作られた.xcworkspaceファイルを開くことを間違えないようにしましょう。