ピーターパン野郎のブログ

釣り・筋トレ・その他日常の出来事も。

【swift・初心者】tableview・画面遷移・URL・webViewあたりの備忘

ども

ダメリです

 

tableViewを使った画面遷移を勉強しました。

 


tableView・セルからの画面遷移を勉強しました。

 

備忘のために流れを。

 

インターフェイス

メインストーリーボードでナビゲーションコントローラー・tabelview・webView+viewControllerを準備。画面遷移の接続。及び名前付け。

それとcocoatouchでviewContoroller.swiftを作成。

 

◆プログラム側

①セルに入れたいデータを配列で作る。

var data: [String] = ["愛加那","赤橋登子","明智光秀","朝日姫","足利尊氏"]

 

②セル

セクションの数→セルの数→セルの中身

 

1:セクションの数

 

func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        return 1

    }

今回はセクションの数は1なので1

 

2:セルの数

   func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return 5

    }

 

 

今回は5個のセルを使ったので5

 

3:セルの中身

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

       let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

        cell.textLabel?.text = self.data[indexPath.row]

        return cell

    }

 

※"cell"はprottype cellsの名前。

 

③2ページ目(ウェブページ表示画面)

webViewをプログラム側に接続→読み込むURLを格納→swift用に翻訳→読み込む→表示

 

1:webViewをプログラム側に接続

@IBOutlet weak var detail: UIWebView!

 

2:読み込むURLを格納

let url = "https://ja.wikipedia.org/wiki/\(self.receive)".stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

※\(self.receive)は今は無視。最初は該当ページのURLでおK

※.stringBy~はエンコーダ

 

3:swift用に翻訳

let nsUrl = NSURL(string: url!)

 

4:読み込む

let request = NSURLRequest(URL: nsUrl!)

 

5:表示

self.detail.loadRequest(request)

 

※detailはwebViewの名前

 

6:データ保管場所を作る

var receive: String!

※次の項目参照

 

④セルをタップした時のアクション

④:セルをタップした時のアクション

タップした時の命令→ストーリーボードに2ページ目(画面名:詳細)を呼んできてもらう→ナビゲーションコントローラーに読んできてもらった2ページ目を前にプッシュしてもらう。→nextView=呼んできた2ページ目のreceiveというデータ保管場所に配列のデータを保存

 

 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

 

//ストーリーボードに2ページ目(画面名:詳細)を呼んできてもらう

//as! detailViewControllerはカスタムしたパーツであることの証。

       let nextView = self.storyboard?.instantiateViewControllerWithIdentifier("詳細") as! detailViewController

//ナビゲーションコントローラーに読んできてもらった2ページ目を前にプッシュしてもらう。

       self.navigationController?.pushViewController(nextView, animated: true)

//nextView=呼んできた2ページ目のreceiveというデータ保管場所に配列のデータを保存

       nextView.receive = self.data[indexPath.row]

    }

 

では。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

【初心者・swift】辞書アプリ※備忘

ポイント

 

①配列について

書き方はいろいろあるみたい。下記はどちらでも可。

var data: Array<String> = ["愛加那","赤橋登子","明智光秀","朝日姫","足利尊氏"]

var data: [String]= ["愛加那","赤橋登子","明智光秀","朝日姫","足利尊氏"]

 

 

取り出し方もいつも忘れがちだから復習。

data[indexpath.row]。

 

②urlの表示

urlの指定→翻訳→urlの読み込み→tableviewに表示。

 

//URLの指定

let url = "https://ja.wikipedia.org/wiki/\(self.receive)".

stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())・・・エンコード

 

エンコードのやり方についてはここを参照

qiita.com

 

//URLをswiftに理解できるように翻訳

let nsurl = NSURL(string: url!)

 

//URLを読み込む

let request = NSURLRequest(URL: nsurl)

 

//tableviewに表示

self.detailview.loadRequest(request)→detailviewはtableviewね。

 

③セルをタップしたら、次の画面へ。

    func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {

        <#code#>

    }

 

storyboardにどの画面を読んでくるのかを指示

    func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {

    let nextView = self.storyboard?.instantiateViewControllerWithIdentifier("呼び出す画面名=storyboardID"asdetailViewController

    }

 

navigationControllerに呼び出した画面(=遷移先の画面)を一番前に出すように依頼

 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

let nextView = self.storyboard?.instantiateViewControllerWithIdentifier("詳細") as! detailViewController

       self.navigationController?.pushViewController(nextView, animated: true)

       nextView.receive = self.data[indexPath.row]

    }

 

 

④2つのtableview間でのデータの受け渡し。※めっちゃ苦手

ViewController.swift

detailViewController.swift

 

セルを押したら画面遷移だけではなくdetailViewController.swiftに選んだデータを渡さないとならない。→まずはdetailViewController.swiftの方にデータを受け取る場所を作る

 

まずはdetailViewController.swiftの方にデータを受け取る場所を作る

var receive: String!

 

次にViewController.swiftに移動

 

選んだ言葉(nextview)をreceiveに入れいれ、配列から要素を取る。

nextView.receive = self.data[indexPath.row]

ども

ダメリです。

 

前回の復習。

 

⑦ストップ機能/スタート機能

if timerRunning = true{

timer.invalidate()

timerRunning = false

}else{

timer = NStimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)

timerRunning = true’’’

}

ここのtimerRunning = falseを入力し忘れる。

timer = NStimerの=を.で書いた 

 

⑧スタートボタンのプログラム update

 

func(){

countNum = countNum - 1

labelUpdate()

if countNum == 0{

timer.invalidate()

timerRunning = false

imgView.image = img02

}

}

 

if countNum == 0{

timer.invalidate()

timerRunning = false

imgView.image = img02

ここが丸漏れ

目指せ脱初心者 swift タイマー

ども

ダメリです。

 

備忘のために表題の件。

 

必要な機能

①分ボタンを押したら、「1分→2分・・・」と増えていく。/秒も同じ

②リセットボタンを押したら、「00:00」に戻る。

③スタートボタン押したらカウントダウンスタート/ストップ押したらストップ

④カウントし終わったら、画像を赤に。

 

必要な部品

時間をカウントする変数 countNum

タイマーが起動しているか起動していないか判別する変数 timerRunning

タイマー機能変数  var timer =  NStimer()

 

 

画像の変化を扱うため? 画像を定数に格納

let img01:UIimage! = UIimage(named"timer.png")

let img02:UIimage! = UIimage(named"timer2.png")

 

 

インターフェイス側からラベル・画像・ボタン4つをそれぞれ接続

 

①まずは分ボタンを押したら、60ずつ足していく

 

countNum = countNum + 60

 

②秒ボタン押したら、1ずつ足す。

countNum = countNum + 1

 

③リセット押したら00:00にする。カウントダウンしきった場合は画像を黒に戻す。

countNum = 0

imageView.image = img01

 

④スタートボタンを押したら、カウントダウン開始

countNum = countNum - 1

 

インターフェイス側のラベルを時間とともに変更

func labelUpdate{

let minut = String(countNum/60)

let second = String(countNum % 60)

let display = minut + ":" + second

label.text = display}

 

⑥残りのボタン3つの中にlabelUpdate()を入れる

 

⑦ストップ機能/スタート機能

if timerRunning = true{

timer.invalidate()

timerRunning = false

}else{

timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)

timerRunning = true’’’

}

 

NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)は1秒ごとに関数updateを呼び起こす。

 

⑧スタートボタンのプログラム update

 

func(){

countNum = countNum - 1

labelUpdate()

if countNum == 0{

timer.invalidate()

timerRunning = false

imgView.image = img02

}

}

【本日の失敗】

ども

ダメリです。


昨日は失敗しませんでした。


ここんとこずっと失敗をしていたので、一安心しました。


、、、がしかし。



まったく充実感は生まれませんでした。



仮説としては、


①できて当たり前のことだから。

②失敗を減らすことが自分の望む成果ではないから

③失敗を減らすことに対してそんなに興味がないから

④継続性がなく、成果として認識できてないから


おそらくら、②か④かなと。


継続的に更新します。

【本日の失敗】

ども

ダメリです。

 

懲りずに失敗をしたので、記録。

 

◆失敗の内容

 メールで宛先を間違える。

 

◆なぜその行動をとったのか。

①確認しなかった。

②頭が働いておらずボーッとしていた。→苦手な作業(日程調整)だったので、「めんどくさいな」と思いながら仕事をしていた。

③日程調整系の場合3つのファイルを行き来して行うので、ミスが起きる箇所が増える。

◆失敗の状況

朝のそんなに忙しくない時間にミス。

 

◆その時の心情

「またかよ・・・」自分への苛立ち不安

◆なぜ失敗だと思ったのか

送り先と宛名の不一致

 

◆対策

「集中する・確認するようにする」では原因の裏返しで意味をなさないことは体験済み。では確認漏れを防ぐための仕組みをどう作るか?

 

確認漏れが増える原因は集中力の低下が大きいと思う。そこに紐付いて何も考えずに作業したり、他のことを考えながら作業してしまう。

 

つまり集中力をキープするための行動をとればよい。

 

考えられる施策

・同じ作業を15分以上続けない。(※集中力は15分単位みたいなので。)

・こまめに休憩を取る。

 

とかですかね?

これで少しでも改善されれば・・・

館山釣り日記

ども

ダメりです

 

先日館山に釣りに行ってきました。

 

●釣果

メゴチ3匹・キス3匹・ハゼたくさん

 

●方法

キス用の仕掛け(2本バリ)にイソメをつけ、ちょい投げ。海底付近をゆっくり・ゆっくりと舐める。3回巻いて少し待って、また3回ってのを繰り返してました。

 

最初は足元にいた小アジ・小サバをサビキ(スキン)で狙っていたのですが、撒き餌には反応するものの全然ヒットせず。途中からサビキの種類をハゲ皮に変えても反応なし。周囲の人は当たってる人もいたのになー・・・

そこからキス狙いに変更。

 

f:id:taikenoki:20160728222815j:plain