【swift・初心者】tableview・画面遷移・URL・webViewあたりの備忘
ども
ダメリです
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())・・・エンコード
エンコードのやり方についてはここを参照
//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") as! detailViewController
}
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回ってのを繰り返してました。
最初は足元にいた小アジ・小サバをサビキ(スキン)で狙っていたのですが、撒き餌には反応するものの全然ヒットせず。途中からサビキの種類をハゲ皮に変えても反応なし。周囲の人は当たってる人もいたのになー・・・
そこからキス狙いに変更。