Swift4アプリ作成「TODOリストアプリ」続き1
追加として、テキスト欄で改行時にキーボードを下げる処理を追加
改行時にキーボードを下げるにはデリゲートプロトコルを採用しないといけないので、 まずClassにUITextFieldDelegateを宣言し、テキストフィールドのdelegateプロパティにselfを設定します
class ViewController: UIViewController,UITextFieldDelegate
var textField:UITextField = UITextField() override func viewDidLoad() { textField.delegate = self }
あとは、改行が入力された時のデリゲートメソッドがあるのでメソッドと中の処理を記述すればOK
//改行の入力のデリゲートメソッド func textFieldShouldReturn(_ textField: UITextField) -> Bool { view.endEditing(true) //改行コードは入力しない return false }
今回は複数行入力する欄がないのでとりあえずこれだけ テキスト欄改行時じゃなくてEditボタン押した時とかも下げた方が良いだろうから割と面倒だな...
まだ試してないのですが以下の記事に色々なキーボードの下げ方が書かれているので参考にしたいなと思いました qiita.com
他に追加したとこは、Cellを並び替えできるようにしました UITableViewを扱うにはUITableViewDelegateとUITableViewDataSourceプロトコルを追加します UITableViewDelegateはテーブル操作のイベント処理、UITableViewDataSourceはテーブルのセクションやセルの値を設定するためのメソッドが定義されているプロトコルだそうです
class ViewController: UIViewController,UITextFieldDelegate,UITableViewDelegate,UITableViewDataSource {
あとはtableViewを作成してdelegateプロパティにselfを設定します
override func viewDidLoad() { super.viewDidLoad() //テーブルビューを作る let myTableView:UITableView let rect = CGRect(x:0,y:0,width:self.view.frame.width,height:self.view.frame.height) let myTableView = UITableView(frame:rect,style:.grouped) //テーブルビューのデリゲートを設定する myTableView.delegate = self // テーブルビューのデータソースを設定する myTableView.dataSource = self self.view.addSubview(myTableView) }
こんな感じですかね
因みに必須メソッド
// セルの個数を指定するデリゲートメソッド func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 0 } // セルに値を設定するデータソースメソッド func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") cell.textLabel?.text = "hoge" return cell }
最初、
移動されたデータを取得 let targetTitle = todoList?[sourceIndexPath.row] //CellValueを取得 if let index = todoList?.index(of:targetTitle!) { //元の位置のデータを配列から削除 todoList?.remove(at:index) //移動先の位置にデータを配列に挿入 todoList?.insert(targetTitle!, at: destinationIndexPath.row) }
って書いてて、そのままQiitaにあげたら 「それだと同じ文字列が渡ってきた時にどうなるの」ってコメントがきて あ、だめやん笑って気づきました..
テスト配列で同じ文字列を使ってなかったので気づけませんでした ってことで以下のように修正
//テスト配列 var todoList:[String] = ["todo01","todo02","todo01","todo03","todo04"] //並び替えが終わったタイミングで呼ばれるメソッド func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) { //sourceIndexPath にデータの元の位置、destinationIndexPath に移動先の位置 //CellValueを取得 if let targetTitle = todoList?[sourceIndexPath.row]{ //元の位置のデータを配列から削除 todoList?.remove(at:sourceIndexPath.row) //移動先の位置にデータを配列に挿入 todoList?.insert(targetTitle, at: destinationIndexPath.row) } }
あまりデリゲートの動きが分かってないので自信ないのですが、多分大丈夫だろうとこれをQiitaに載せました qiita.com
並び替えは以下のような感じ
良さそう pic.twitter.com/WEHt35c4cn
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年12月12日
このUITableViewってだいぶ面倒な感じがする.......
参考URL
Swift4アプリ作成「TODOリストアプリ」
2ヵ月前くらいにARKitが気になったのでメインのスマホをAndroid5からiPhone8にしました
iPhone8買ったー pic.twitter.com/mqP8A1GeGD
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年10月22日
因みに
さよならバイバイ El capitan pic.twitter.com/XSviRqr7cp
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年10月31日
El capitanではARKitが使えるXcode9が使えない為全てはmacOS sierra 以上にしか対応してないXcodeの為に pic.twitter.com/FefWs6Cn1n
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年10月31日
そして多分
この日からかな。Swiftの勉強をし始めました。挿入るだけ pic.twitter.com/KPQrzD927Q
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年11月6日
Swift4から始めたことになったのですが、ネットでSwiftコードを検索するとシンタックスがだいぶ違うようで Swift4を勉強してもSwift2とか3とかは書ける気がしません...
と、ずっとSwift4の基礎を勉強していたのですが、そろそろアプリを作ってみようと思い Helloアプリとして王道な「TODOリストアプリ」を作ってみることにしました
アプリを作ることによって、ちゃんと理解できているか、 また、勉強を始めた頃はあまりよく分かっていなかった部分の理解を深めることが狙いです
また作っていくことによって新たな学びが出でくると思うので、知見を深める為でもあります
...と、早速色々と躓いた部分は出てきました
Optionalのお勉強
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年12月11日
どこよりも分かりやすいSwiftの"?"と"!" https://t.co/vhjE3X2wER
分かりやすかった。でもOptional ValueにするかImplicitly Unwrapped Optionalにするかは慣れて判断するしかないのかなあ
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年12月11日
Optional Chainingはnilの場合には処理をキャンセルするんだなー便利そう
ifかelseで値が変わる変数を設定するSwiftっぽいやり方 https://t.co/fzMfPyc3CN
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年12月11日
Optional Valueに関してはあやふやだったまま進めてた感じだったのですが、割と重要なとこだったみたいだったので学ぶ機会を作って良かったと思いますif letってOptional Valueがnilの場合にってことか
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年12月11日
この辺最初に学んだ時、あんまり分かってなくて理解してなかったな...
完成品
王道としてSwiftでTODOアプリを作ってみた pic.twitter.com/aU5mekNeRS
— 𝔽𝕣𝕠𝕘𝕎𝕠𝕞𝕒𝕟♂N ͣg ͣs ͣk ͥ (@FrogWomanJP) 2017年12月11日
参考にさせて頂いた記事 mtomitomi.hatenablog.com qiita.com qiita.com
作成するにあたって、 TODOリストを検索してみると入力画面と一覧画面が別々になっているものが多かったのですが できればシンプルに入力画面と一覧画面を同じページにしたかったのでそれらの機能を同じページに置いてみました
ただ、入力内容が複雑になるとやっぱり入力欄が別である方が勝手が良いと思うので、その辺は考えてみようと思います
あとは、Storyboardを使わずにUIをコードで書くことを課題にしました
これはXcodeでのARでの表現にも繋がると思います (実際、AR上でUIを扱う際に躓いたのでアプリを作って基礎を固めようと思ったのもある)
そんな感じです、以上
続く
Echo dotが届いた
11/15に「Amazon Echoの招待者に選ばれました」というメールが届いて11/17に届きました
プレミアム会員で且つキャンペーン期間だったので2,000円OFFで3,980円で購入できました
今時な薄っぺらい取説だったので使い方が分かりづらかったのですが、ネットで検索して
「Amazon Alexa」アプリを使ってスマートフォンからAmazon echoに接続をして設定などを行うと分かったのでインストールして設定を行いました
Alexlaに普通に話しかけてみたり、Twitterで話題になってたMIKUさんやピカチュウ等のスキルを試してみたりしました
アレクサ起動
Alexa———- pic.twitter.com/CfBA1nlzz5
— 吉田カエル@長崎 (@Frog_woman) 2017年11月17日
じゃんけん&スキル「Hey MIKU!」
Hey MIKU pic.twitter.com/ie7WAfPRRM
— 吉田カエル@長崎 (@Frog_woman) 2017年11月17日
スキル「NHKラジオニュース」?
ニュースを読むアレクサ pic.twitter.com/JBECuVqpon
— 吉田カエル@長崎 (@Frog_woman) 2017年11月17日
ピカチュウを呼んだら一人二役を始めた… pic.twitter.com/2hUg7nU3lS
— 吉田カエル@長崎 (@Frog_woman) 2017年11月17日
スキル「カラオケJOYSOUND」
JOYSOUND pic.twitter.com/u36SEXBtDB
— 吉田カエル@長崎 (@Frog_woman) 2017年11月18日
スキル「二ホンアマガエルの合唱」
カエルの鳴き声 pic.twitter.com/EeOqKXmpr5
— 吉田カエル@長崎 (@Frog_woman) 2017年11月18日
スキル「仮想通貨チャート」
仮想通貨チャート pic.twitter.com/u1XDKCM9PF
— 吉田カエル@長崎 (@Frog_woman) 2017年11月18日
・・・という感じです
因みにアレクサさんSiriさんみたいに、声を覚えることができないみたいなので
自分以外の声にも反応します
Alexaからミクさんを呼び出して、なぐさめてもらおうかと思ったらダメだった件 pic.twitter.com/peLeKFyINs
— 丸山 武志(まるくん) (@marukun) 2017年11月17日
まるくんさんのHey MIKUを使ってみた
— 吉田カエル@長崎 (@Frog_woman) 2017年11月18日
(勝手に使ってすみません) pic.twitter.com/hecrH4LEMu
元々の機能として
(以下、全て最初にアレクサ、を付けます)
・早口言葉を言って
・じゃんけんをしよう
・Blootoothデバイスを接続して
・止めて
・音量を5にして(1~10)
・音楽をかけて
・「リラックス」プレイリストをかけて
・ポップスの曲をかけて
・これは何という曲?
・朝7時に起こして
・15分のタイマーをセットして
・アルカリ乾電池を3本注文して
・コーヒーを再注文して
…等があるようです。
基本的にスキル等の止め方としては
「アレックス、止まって」で良さそうです(多分。たまになかなか反応しなかったりする)
自分は最近AndroidからiPhone8に変えてSiriをよく使うようになりました
仮眠をとりたい時に「Hey,Siri 1時間後にアラーム」と言ってアラームをセットして貰って「Hey Siri,バイバイ」と言ってSiriを終了させて仮眠をとったりしてます。
「明日の天気は?」「タイマー10秒設定して」「音楽流して」「音量上げて」「〇〇について教えて」「Twittter開いて」とか
出来ることは限られてますがスマホを触らずに済むので便利だなと思います
(「アプリを閉じて」とか「スリープにして」とか閉じる系はできないみたい)
Amazon echoに関してもSiri等に関しても、まだまだ出来ることは少ないかもしれませんが
これから、生活のサポートとして発展していくんだろうなあと思ってます