質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1228閲覧

ボタン押した時、APIデータが切替表示されない【Swift】

kazuki_user

総合スコア147

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/08/24 04:37

編集2020/08/24 04:37

## ボタン押した時、APIデータが切替表示されない

previousボタンと、nextボタンを押した時、
別IDのAPIデータに切り替わるようにしたいです。(SWAPI使用)

ボタンは正常に押せます。

## 参考

画面下側に、previousnextがあります。

イメージ説明

## コード

適切なコードの箇所が分からないので、とりあえずVCだけ載せます。

swiftVC

1import UIKit 2 3class FilmsVC: UIViewController, PersonProtocol { 4 5 @IBOutlet weak var titleLbl: UILabel! 6 @IBOutlet weak var episodeLbl: UILabel! 7 @IBOutlet weak var directorLbl: UILabel! 8 @IBOutlet weak var producerLbl: UILabel! 9 @IBOutlet weak var releasedLbl: UILabel! 10 11 @IBOutlet weak var crawLbl: UITextView! 12 13 @IBOutlet weak var previousBtn: UIButton! 14 @IBOutlet weak var nextBtn: UIButton! 15 16 var person : Person! 17 let api = FilmsApi() 18 var currentFilm = 0 19 var films = [String]() 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 24 films = person.filmUrls 25 guard let firstFilm = films.first else { return } 26 getFilm(url: firstFilm) 27 28 previousBtn.isEnabled = false 29 nextBtn.isEnabled = films.count > 1 30 31 // Do any additional setup after loading the view. 32 } 33 34 func getFilm(url: String) { 35 api.getFilm(url: url) { (film) in 36 if let film = film { 37 self.setupView(film: film) 38 } 39 } 40 } 41 42 func setupView(film: Film) { 43 titleLbl.text = film.title 44 episodeLbl.text = String(film.episode) 45 directorLbl.text = film.director 46 producerLbl.text = film.producer 47 releasedLbl.text = film.releaseDate 48 crawLbl.text = film.craw 49 } 50 51 52 @IBAction func previousClicked(_ sender: Any) { 53 currentFilm -= 1 54 setBtnState() 55 } 56 @IBAction func nextClicked(_ sender: Any) { 57 currentFilm += 1 58 setBtnState() 59 } 60 61 func setBtnState() { 62 previousBtn.isEnabled = currentFilm == 0 ? false : true 63 nextBtn.isEnabled = currentFilm == films.count - 1 ? false : true 64 } 65 66} 67

## 参考サイト

質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ボタンを押したときの処理に、APIを呼び出して描画を更新するような処理が実装されていないからでは?

swift

1 @IBAction func previousClicked(_ sender: Any) { 2 currentFilm -= 1 3 getFilm(url: films[currentFilm]) 4 setBtnState() 5 } 6 @IBAction func nextClicked(_ sender: Any) { 7 currentFilm += 1 8 getFilm(url: films[currentFilm]) 9 setBtnState() 10 } 11 12 // ここもちょっと冗長ですね…… 13 func setBtnState() { 14 previousBtn.isEnabled = currentFilm > 0 15 nextBtn.isEnabled = currentFilm < films.count 16 }

投稿2020/08/24 04:47

thyda.eiqau

総合スコア2982

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuki_user

2020/08/24 05:13

無事解決しました! 冗長なコードも直してみます????‍♂️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問