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

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

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

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

1029閲覧

[swift]Tabelviewの中にbuttonを入れ、配列のURLを呼び出す

guid

総合スコア0

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/10/19 13:26

前提・実現したいこと

Tabelviewの中にbuttonを入れてそのbuttonをタップすると配列で指定したURLに飛ぶようにしたいのですが配列で順番にURLを呼び出すためにはどのようにすればよいですか

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

swift
ソースコード
import UIKit
import SafariServices

class tabelview: UIViewController ,
UITableViewDataSource, UITableViewDelegate{

@IBOutlet var table:UITableView! // section毎の画像配列 let imgArray: NSArray = [ "img1", "img2","img3", "img4","img5",] let label2Array: NSArray = [ "100000円","8/23/16:15", "8/23/16:47","8/23/17:10", "8/23/1715:","8/23/17:21", "8/23/17:33","8/23/17:41"] override func viewDidLoad() { super.viewDidLoad() } //Table Viewのセルの数を指定 func tableView(_ table: UITableView, numberOfRowsInSection section: Int) -> Int { return imgArray.count } //各セルの要素を設定する func tableView(_ table: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // tableCell の ID で UITableViewCell のインスタンスを生成 let cell = table.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) let img = UIImage(named: imgArray[indexPath.row] as! String) // Tag番号 1 で UIImageView インスタンスの生成 let imageView = cell.viewWithTag(1) as! UIImageView imageView.image = img // Tag番号 2 で UILabel インスタンスの生成 let label1 = cell.viewWithTag(2) as! UILabel label1.text = "No." + String(indexPath.row + 1) // Tag番号 3 で UILabel インスタンスの生成 let label2 = cell.viewWithTag(3) as! UILabel label2.text = String(describing: label2Array[indexPath.row]) let Button1 = cell.viewWithTag(4) as! UIButton Button1.addTarget(self, action: #selector(self.Button(_:)), for: UIControl.Event.touchUpInside) return cell } let abc = [ "https://www.youtube.com/","https://www.youtube.com/watch?v=RgMONk-LLPM", "https://www.youtube.com/","https://www.youtube.com/", "https://www.youtube.com/","https://www.youtube.com/", "https://www.youtube.com/","https://www.youtube.com/"] @objc func Button(_ sender: UIButton) { let url = URL(string: abc)! if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) } } // Cell の高さを120にする func tableView(_ table: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 600.0 }

}

試したこと

補足情報(FW/ツールのバージョンなど)

let abc=[...]
のところからURLを取り出したいのですが
let url = URL(string: abc)!
の部分をどのように改良すればよいですか?

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

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

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

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

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

guest

回答1

0

abcは配列なので、その配列の中から取り出したいindex番号を指定してあげればいいと思います!

ex) "https://www.youtube.com/watch?v=RgMONk-LLPM" の場合

let url = URL(string: abc)!

let url = URL(string: abc[1])!

投稿2021/10/24 11:18

Pomu3270

総合スコア280

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

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

guid

2021/10/24 11:51

index番号を1ずつ増やしたいのですが、for文を使うとエラーが起こります。正しいfor文の使い方などはありますか?また、使えない場合for文と同じようなことをするには、どのようにすれば良いでしょうか?
Pomu3270

2021/10/24 11:56

実現させたい機能として、tableviewの一つ目のcellのbuttonをタップするとhttps://www.youtube.com/"へ遷移し、2個目をタップするとhttps://www.youtube.com/watch?v=RgMONk-LLPM",に遷移する実装で間違いないでしょうか?
guid

2021/10/25 05:38

はい! その通りです
Pomu3270

2021/10/25 12:13 編集

cellForRowAtの箇所で、cellにindex番号を付与して、上記位に記載しました let url = URL(string: abc[1])! などの[数値]の部分を[indexPath.row]で指定してあげることで、タップしたセルのindex番号を基にabc配列から取り出せばいいと思います。 以下でどうでしょうか???? func tableView(_ table: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = table.dequeueReusableCell(withIdentifier: "tableCell",for: indexPath) ... let Button1 = cell.viewWithTag(4) as! UIButton Button1.addTarget(self, action: #selector(self.Button(_:)), for: UIControl.Event.touchUpInside) cell.tag = indexPath.row // セルにindex番号を付与する。 追記!!! return cell } @objc func Button(_ sender: UIButton) { let indexPath = sender.tag   // cellについているindex番号を取得 let targetURL = abc[indexPath] let url = URL(string: targetURL)! if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) }
guid

2021/10/25 14:06

そっくりやってみたのですがどのボタンを押しても1個目のURLにしか飛ばないです。 どのように改良すればよろしいでしょうか?
Pomu3270

2021/10/25 14:17

現状は、変数indexPathがindex番号を取れていない状態ということでしょうか? では、以下のやり方でどうでしょうか? https://e-joint.jp/446/
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問