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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

button

HTMLで用いる<button>タグです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

1回答

460閲覧

【swift5】【XMLParser】tapされたbuttonによって表示するtableView(RSS通信を実行)の内容を変える方法

taroooth

総合スコア20

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

button

HTMLで用いる<button>タグです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2019/09/16 04:46

開発環境

xcode10.3
swift5

実現したいこと

XMLParserを使って取得した内容を、tableViewControllerにリストアップするアプリを作成中です。当初は複数のtableViewControllerを作成し、ボタンによって遷移先を変える手法を取っていました。しかし取得する情報が増えてきてstoryBoardが冗長になってしまったので、tableViewControllerを一つにして、tapされたbuttonによって取得・表示する情報を変更する機能を実装したいのですが、方法が分からないのでご享受頂きたいです。

試したこと

各buttonにtagを付けてswitch文で条件分岐する方法を試そうとしましたが、どう処理すればいいのか分からず失敗しました。

self.items = [] if let url = URL( string: "https://〇〇/feed" ){ if let parser = XMLParser(contentsOf: url) { self.parser = parser self.parser.delegate = self self.parser.parse() } } } //以下いくつかbuttonActionの処理が続きます↓ @IBAction func buttonAction(_ sender: Any) { if let button = sender as? UIButton { if let tag = actionTag(rawValue: button.tag) { switch tag { case .action1: Button1(<#UIButton#>) //()内に何を入れればいいのか分かりません case .action2: Button2(<#UIButton#>) case .action3: Button3(<#T##sender: UIButton##UIButton#>) } } } } コード

拙い説明で恐縮ですが、よろしくお願いいたします。

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

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

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

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

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

takabosoft

2019/09/17 00:52

case .action1~3に入ったあと、具体的に何の処理をしたいのでしょう?
taroooth

2019/09/21 09:39

ありがとうございます。遷移先のtableViewControllerに指定したrssFeed情報を出力したいです。
guest

回答1

0

詳しい画面の構成がわからないのですが、
ボタンをたくさんつけている???

rssUrlを引数にしてただprivate funcを作り、
ボタン毎に違うfuncを用意し、引数を変えて呼び出せばいいような気がしますが、、、

Swift

1private func getRssfeed(url: String) { 2 // urlを用い、フィード取得し、配列にセットし直し、tableViewをreloadするコードを書く 3}

もしそれが嫌というのであれば、
ボタンのクリック時のfuncをaddTargetで同じ名前で登録し、
senderをUIButtonにして、 sender.tag でswitchするとかですか?
http://programming-beginner-memo.com/?p=20

Swift

1// ボタンにつけるfunction設定 2buttonA.addTarget(self, action: #selector(ViewController.getRss(sender: )), for: .touchUpInside)) 3buttonB.addTarget(self, action: #selector(ViewController.getRss(sender: )), for: .touchUpInside)) 4buttonC.addTarget(self, action: #selector(ViewController.getRss(sender: )), for: .touchUpInside)) 5 6@objc func getRss(sender:UIButton) { 7 var rssUrl = "" 8 switch sender.tag { 9 case 100: rssUrl = "http://www.xxxx" 10 case 200: rssUrl = "http://www.xxxx" 11 case 300: rssUrl = "http://www.xxxx" 12 default: break 13 } 14 // rssUrlを利用してフィード取得, 配列にセット、tableviewをreload 15} 16

いかがでしょうか?

投稿2019/09/17 12:47

hameji

総合スコア1380

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

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

taroooth

2019/09/21 09:36

ありがとうございます。ご回答頂いてから上記二つの方法を試したのですが私のswiftの知識が不十分なためか上手く実装出来ませんでした。二つ目の方法について二点お聞きしたいのですが、①「buttonA.addTarget〜」の部分は「viewDidLoad()」に追加すれば良いのでしょうか? ②「getRss(sender: UIButton)」を「viewDidLoad()」で使う時、UIButtonの部分には何を入力すれば良いのでしょうか? 初歩的な質問で申し訳ありません。よろしくお願い致します。
hameji

2019/09/21 10:46 編集

①はviewDidLoadで問題ないと思います。 ②はaddTarget(self, action: #selector(getRss), for: .touchUpInside))とし、 実際のfuncのとこは@objc func getRss(sender: UIButton)のままでエラーなく使えると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問