【Swift】UISwitchをオーバーライドでカスタマイズ
class mySwitch:UISwitch { required init?(coder aDecoder: NSCoder) { fatalError() } override init(frame: CGRect) { super.init(frame:frame) self.onTintColor = UIColor.red self.thumbTintColor = UIColor.cyan } } let myswitch = mySwitch() myswitch.isOn = true
【Swift】配列、辞書の基礎文法
配列の指定位置に要素を挿入する
//配列の指定位置に要素を挿入 var array = [0,1,2] array.insert(9, at: 0) //[9,0,1,2] array.insert(8, at: 4) //[9,0,1,2,8]
配列をソートする
//配列のをソート //昇順 array = array.sorted() print(array) //[0, 1, 2, 8, 9] //降順 array = array.sorted(by: {$0 > $1}) print(array) //[9, 8, 2, 1, 0]
辞書のキーと値をfor文で取り出す
//辞書が持つ全ての要素を調べる var dic = ["one":1, "two":2, "three":3] for (k, v) in dic { print(k, v) /* one 1 two 2 three 3 */ //ただし、取り出される順番は保証されない }
辞書の要素を削除する
//辞書の要素を削除する dic.removeValue(forKey: "one") //["two":2, "three":3] dic.removeAll() //[]
【Swift】Firebaseからデータを順番に取り出す
解説
・過去の記事で、Firebaseからデータを取得する方法を紹介した
・しかし、上記の方法では、取り出すデータの順番がバラバラになってしまう
・そこで、今回は順番に取り出す方法を紹介する
・データを投稿順に(昇順に)ソートする場合、ソートするためのデータを保存しなくても、データの階層(childByAutoId)でソートできる
・childByAutoId()は乱数の階層を生成するが、sorter()メソッドを使用すれば、登録順にデータをソートしてくれる
・下記のデータベースを例にする場合、
- let snapdata = snap.value as? [String:NSDictionary]で、全ての階層を取得
- for key in snapdata!.keys.sorted() {} で、変数keyに階層を順に代入していく
- let snap = snapdata![key]で、階層内にある全てのデータを辞書でsnapに代入
- if let roomname = snap!["RoomName"] as? String {} で、roomnameに"RoomName"のキーで保存された値("はわはわ")を代入
という流れになる。
チャットアプリや掲示板アプリなどを作る際、是非とも参考にしてくれたまえ。
ソースコード
//Firebaseからルーム一覧を取得する func loadData_Firebase() { //Databaseの参照URLを取得 let ref = Database.database().reference() //データ取得開始 ref.child("post").child("RoomList").observeSingleEvent(of: .value) { (snap, error) in //RoomList下の階層をまとめて取得 let snapdata = snap.value as? [String:NSDictionary] //データを取得する配列 self.roomArray = [String]() //もしデータがなければ無反応 if snapdata == nil { return } //snapdata!.keys : 階層 //key : 階層 for key in snapdata!.keys.sorted() { //snap : 階層下のデータを書くのすいた辞書 //今回なら、snap = ["RoomName":"はわはわ"] let snap = snapdata![key] if let roomname = snap!["RoomName"] as? String { self.roomArray.append(roomname) } } } }
【Swift】セルをタップ時、セルの色を自由に変更する
完成図
解説
・cell.selectionTypeに用意されたプロパティ(.none, .blue, .gray)を設定するだけ
・自分好みの色に設定するなら、
- UIViewを生成
- UIVIewの背景色を設定
- cell.selectedBackgroundViewにUIViewを代入
をするだけ
ソースコード
import UIKit class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { @IBOutlet weak var tableView: UITableView! //セルのテキストを格納 var array = ["AAA","BBB","CCC"] override func viewDidLoad() { super.viewDidLoad() //これを追加するだけ tableView.tableFooterView = UIView() } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return array.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) //これでセルをタップ時、色は変化しなくなる cell.selectionStyle = UITableViewCell.SelectionStyle.none //自分で色を設定したい場合は、タップ時の色を指定したUIViewを代入 let selectionView = UIView() //タップすると赤色になる selectionView.backgroundColor = UIColor.red cell.selectedBackgroundView = selectionView cell.textLabel?.text = array[indexPath.row] return cell } }