読者です 読者をやめる 読者になる 読者になる

ダメリのブログ

日々の失敗・キャリア・プログラミング・株・毎日の失敗等。誰かの役に立てれば幸いです。

【swift 初心者開発日記】カスタムセルを作ったよ。

ども

ダメリです

 

今日はカスタムセルについて勉強しました。

 

備忘もかねて作り方〜使い方までを書きます。

 

覚えることのメリット

→デザイン性の高いセルを作ることができる。

 

こんな感じ。

f:id:taikenoki:20160814223433p:plain

 

◆作り方

①xibファイルでカスタムセルの作成

②自由にデザイン

 

①について

f:id:taikenoki:20160814221755p:plain

feile→cocoa touchclassを選択すると上記画面に。

subclass ofをUITableViewCellにする。

 

その際に必ず「Also create XIB file」にチェックを入れる。これで「自分でつけたクラス名.swift」と「自分でつけたクラス名.xib」が追加される。

 

②について

上記で追加した「自分でつけたクラス名.xib」にあとはカスタムしていくだけ。

画像入れたり、ラベル付けたり。

 

◆使用方法

※普通のセルと違い、ストーリーボードカスタムセルの登録などはではできないので注意

①カスタムセルの登録

②カスタムセルに名前をつける。

 

 override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

        

        self.newsTableView.delegate = self

        self.newsTableView.dataSource = self

        

        //①カスタムセルの登録

       let xib = UINib(nibName: "newsTableViewCell", bundle: nil)

        //②カスタムセルに名前を作る。

       self.newsTableView.registerNib(xib, forCellReuseIdentifier: "newsCell")

        

    }

 

 

あとはそれぞれの用途に応じて使っていけばオK。

 続きは次回。

では。

 

【釣り日記】釣り船打木屋さんを利用してきました!

ども

ダメリです。

 

昨日は釣り船打木屋さんに行ってきました。

www.uchikiya.com

 

アジ釣りを選択。

 

めちゃくちゃ釣れて楽しかったです!天気も良かったのですごい気持ち良く、波に揺られながら竿をたらして魚を待つ・・・至福のひと時。・・・否。圧倒的至福。日々のストレスから解放されました。やはり自然って良いですね。船酔いの心配ない人は船上でお酒飲むとさらに解放的な気分になるかも。

 

船釣りの魅力はキャプテンが釣れるスポットまで連れて行ってくれることと、技術的なアドバイスをもらえること。つまり高確率で魚を釣ることができるんです。

 

キャプテンやアドバイザー?の人は口は悪いけど、めちゃくちゃ良い人です。そして受付の女将さんは神のごとく良い人でした!

 

釣った魚は14匹位かな?全部込み込みで7000円ちょい。(釣竿・仕掛け・酔い止め・クーラーボックス代全て込み)

 

釣り後は釣った魚を持って川崎の高田屋さんへ。

高田屋 川崎駅前店(メニュー/クーポン) - ぐるなび

 

釣った魚を2000円で3品作ってくれます。飲み放題ないので注意。

 

お造り・アジフライ・アジの開きにしてもらいました。特にアジフライは絶品でフワフワサクサクのアジにビールをゴクッと・・・悪魔的至福。

 

では。

f:id:taikenoki:20160813162934j:plain

 

【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

}

}

【本日の失敗】

ども

ダメリです。


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


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


、、、がしかし。



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



仮説としては、


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

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

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

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


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


継続的に更新します。