FROGWOMAN@長崎

http://blog.livedoor.jp/frog_woman から移転。

Swift4アプリ作成「TODOリストアプリ」続き1

frogwoman.hatenablog.jp の続き

追加として、テキスト欄で改行時にキーボードを下げる処理を追加

改行時にキーボードを下げるにはデリゲートプロトコルを採用しないといけないので、 まず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を扱うにはUITableViewDelegateUITableViewDataSourceプロトコルを追加します 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

並び替えは以下のような感じ

このUITableViewってだいぶ面倒な感じがする.......

参考URL

yuu.1000quu.com

qiita.com

http://docs.fabo.io/swift/uikit/006_uitableview.html

himaratsu.hatenablog.com

続く frogwoman.hatenablog.jp

Swift4アプリ作成「TODOリストアプリ」

2ヵ月前くらいにARKitが気になったのでメインのスマホをAndroid5からiPhone8にしました



因みに

El capitanではARKitが使えるXcode9が使えない為仕方なくmacOS sierraにアプデ

そして多分

この日からかな。Swiftの勉強をし始めました

Swift4から始めたことになったのですが、ネットでSwiftコードを検索するとシンタックスがだいぶ違うようで Swift4を勉強してもSwift2とか3とかは書ける気がしません...

と、ずっとSwift4の基礎を勉強していたのですが、そろそろアプリを作ってみようと思い Helloアプリとして王道な「TODOリストアプリ」を作ってみることにしました

アプリを作ることによって、ちゃんと理解できているか、 また、勉強を始めた頃はあまりよく分かっていなかった部分の理解を深めることが狙いです

また作っていくことによって新たな学びが出でくると思うので、知見を深める為でもあります

...と、早速色々と躓いた部分は出てきました

Optional Valueに関してはあやふやだったまま進めてた感じだったのですが、割と重要なとこだったみたいだったので学ぶ機会を作って良かったと思います



完成品



参考にさせて頂いた記事 mtomitomi.hatenablog.com qiita.com qiita.com



作成するにあたって、 TODOリストを検索してみると入力画面と一覧画面が別々になっているものが多かったのですが できればシンプルに入力画面と一覧画面を同じページにしたかったのでそれらの機能を同じページに置いてみました

ただ、入力内容が複雑になるとやっぱり入力欄が別である方が勝手が良いと思うので、その辺は考えてみようと思います

あとは、Storyboardを使わずにUIをコードで書くことを課題にしました

これはXcodeでのARでの表現にも繋がると思います (実際、AR上でUIを扱う際に躓いたのでアプリを作って基礎を固めようと思ったのもある)

そんな感じです、以上

続く

frogwoman.hatenablog.jp

Echo dotが届いた

f:id:frog_woman:20171118144545p:plain

http://amzn.to/2APX287

11/15に「Amazon Echoの招待者に選ばれました」というメールが届いて11/17に届きました
プレミアム会員で且つキャンペーン期間だったので2,000円OFFで3,980円で購入できました

今時な薄っぺらい取説だったので使い方が分かりづらかったのですが、ネットで検索して
Amazon Alexa」アプリを使ってスマートフォンからAmazon echoに接続をして設定などを行うと分かったのでインストールして設定を行いました

f:id:frog_woman:20171118150504j:plain

f:id:frog_woman:20171118150514j:plain

f:id:frog_woman:20171118150906j:plain

f:id:frog_woman:20171118150929j:plain



Alexlaに普通に話しかけてみたり、Twitterで話題になってたMIKUさんやピカチュウ等のスキルを試してみたりしました


アレクサ起動

 

 

じゃんけん&スキル「Hey MIKU!」

 


スキル「NHKラジオニュース」?

 


スキル「ピカチュウトーク

 

 

スキル「カラオケJOYSOUND

 


スキル「二ホンアマガエルの合唱」

 


スキル「仮想通貨チャート」

 

 

・・・という感じです


因みにアレクサさんSiriさんみたいに、声を覚えることができないみたいなので
自分以外の声にも反応します


 

元々の機能として
(以下、全て最初にアレクサ、を付けます)
・早口言葉を言って

・じゃんけんをしよう

・Blootoothデバイスを接続して

・止めて

・音量を5にして(1~10)

・音楽をかけて

・「リラックス」プレイリストをかけて

・ポップスの曲をかけて

・これは何という曲?

・朝7時に起こして

・15分のタイマーをセットして

・アルカリ乾電池を3本注文して

・コーヒーを再注文して

 

…等があるようです。

 

 

基本的にスキル等の止め方としては

「アレックス、止まって」で良さそうです(多分。たまになかなか反応しなかったりする)

 

自分は最近AndroidからiPhone8に変えてSiriをよく使うようになりました

仮眠をとりたい時に「Hey,Siri 1時間後にアラーム」と言ってアラームをセットして貰って「Hey Siri,バイバイ」と言ってSiriを終了させて仮眠をとったりしてます。

 

「明日の天気は?」「タイマー10秒設定して」「音楽流して」「音量上げて」「〇〇について教えて」「Twittter開いて」とか

出来ることは限られてますがスマホを触らずに済むので便利だなと思います

(「アプリを閉じて」とか「スリープにして」とか閉じる系はできないみたい)

 

Amazon echoに関してもSiri等に関しても、まだまだ出来ることは少ないかもしれませんが

これから、生活のサポートとして発展していくんだろうなあと思ってます