##やること
Tableviewを作る
##Tableviewを作る
①Tableviewを作るコードを記入
let tableView: UITableView = {
let tv = UITableView()
return tv
}()
②override func viewDidLoad
の中にtableviewを表示させるコードを記入
view.addSubview(tableView)
③tableviewのサイズを指定
tableView.frame.size = view.frame.size
##tableviewのデリゲートのメソットの設定
①override func viewDidLoad
の中にデリゲートのメソットを使えるようにするコードを記入
tableView.delegate = self
tableView.dataSource = self
これでデリゲートのメソットが使えるようになりました。
②classの一番上のところにprivate let cellId = "cellId"
と記入
③一番下にデリゲート使うにあたって必ず必要なメソッドを記入
extension ViewController: UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10 //とりあえず10にしておきました。
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
cell.backgroundColor = .blue //確認のため
return cell
}
}
④override func viewDidLoad
の中にTableViewに上記のメソッドを反映させるコードを記入
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
##タイトルをつける
①Main.storyboardに移動してViewControllerを選択し、Editor
→Embedld
→NavigationController
を選択してNavigationControllerを設置する。
②ViewController.swiftに戻ってoverride func viewDidLoad
の中にタイトルを表示させるコードを入力する
navigationItem.title = "おすすめレシピ"
無事反映させることができました!
次はこの前のAPIを実際表示させてみたいと思います。
初心者なので上記のコードがベストなのかはわからないのですが勉強の記録として書かせていただきます。
より良い方法があればご教授いただけると嬉しいです。
##今のところ全体のコード
struct ResultList: Codable {
let result: [User]
struct User: Codable {
let foodImageUrl :String
let recipeTitle :String
}
}
class ViewController: UIViewController {
private let cellId = "cellId"
//tableviewを作っていく
let tableView: UITableView = {
let tv = UITableView()
return tv
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(tableView)
tableView.frame.size = view.frame.size
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
navigationItem.title = "おすすめレシピ"
getRApi()
}
private func getRApi(){
guard let url = URL(string: "楽天API") else {return}
let task = URLSession.shared.dataTask(with: url) { (data, response, err)in
if let err = err {
print("情報の取得に失敗しました。:", err)
return
}
if let data = data{
do{
let resultList = try JSONDecoder().decode(ResultList.self, from: data)
print("json: ", resultList)
}catch(let err){
print("情報の取得に失敗しました。:", err)
}
}
}
task.resume()
}
}
extension ViewController: UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
cell.backgroundColor = .blue //確認のため
return cell
}
}