アプリ版:「スタンプのみでお礼する」機能のリリースについて

ご返答ありがとうございます!URLのローカルを試しましたが上手く行きませんでした。
難しくなるのですが、
import UIKit
import SafariServices

class tabelview: UIViewController ,
UITableViewDataSource, UITableViewDelegate,UIScrollViewDelegate {

@IBOutlet var table:UITableView!

// section毎の画像配列
let imgArray: NSArray = [
"img1",
"img2","img3",
"img4","img5",]

let img1Array: NSArray = [
"img1",
"img2","img3",
"img4","img5",]

let img2Array: 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"]
let abc: NSArray = ["https://www.youtube.com/","https://www.google.co …]
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)

let img1 = UIImage(named: img1Array[indexPath.row] as! String)

let img2 = UIImage(named: img2Array[indexPath.row] as! String)

// Tag番号 1 で UIImageView インスタンスの生成
let imageView = cell.viewWithTag(1) as! UIImageView
imageView.image = img

let imageView1 = cell.viewWithTag(10) as! UIImageView
imageView1.image = img1

let imageView2 = cell.viewWithTag(20) as! UIImageView
imageView2.image = img2

// 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.addAction(.init{ [self] _ in
let url = URL(string: self.abc[indexPath.row] as! String)!
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
}},for:.touchUpInside)


let page = cell.viewWithTag(5) as! UIPageControl
let scroll = cell.viewWithTag(6) as! UIScrollView
scroll.delegate = self

func scrollViewDidEndDecelerating(scrollView: UIScrollView) {

page.currentPage = Int(scroll.contentOffset.x / scroll.frame.maxX)
}

return cell
}


// Cell の高さを120にする
func tableView(_ table: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat {
return 600.0
}
}
こちらのソースコードの

let page = cell.viewWithTag(5) as! UIPageControl
let scroll = cell.viewWithTag(6) as! UIScrollView
scroll.delegate = self

func scrollViewDidEndDecelerating(scrollView: UIScrollView) {

page.currentPage = Int(scroll.contentOffset.x / scroll.frame.maxX)
}
この部分を利用するにはどのようにすれば良いでしょうか?
tagで宣言するには、セルの中に入れないといけません。しかし、func scrollViewDidEndDecelerating(scrollView: UIScrollView) {

page.currentPage = Int(scroll.contentOffset.x / scroll.frame.maxX)
}
この部分は、セルの外に出したいのです。
その場合どのようすれば解決できますでしょうか?度重なる質問申し訳ございません。

A 回答 (4件)

>xcodeでやっているため、storyboardも使っております。


作成中の画面キャプチャ、あるいはポンチ絵(概念図)をどっかに掲示してみては。なにか回答がえられるかも。

>tagで宣言するには、セルの中に入れないといけません。

個人的には、ここが間違いの元じゃないかと思います。
テーブルビューとスクロールビューの包含関係が解ってないので、勘違いかもしれませんが。
    • good
    • 0

質問文が説明不足で、質問者のやりたいことが見えてないような。



処理対象としているスクロールビューを、テーブルビューのセルから取り出しているということは、その紐づけをXcode(Storyboad?)で記述していると思われますが、そこらへんの詳細も開示しないと、回答者も状況をつかめないと思います。

>この部分は、セルの外に出したいのです。
――のところだと、単に記述上の質問にしか見えないような。

で、
scrollViewDidEndDeceleratingは、スクロールビューコントローラに記述するメソッドです。
>class tabelview: UIViewController ,
UITableViewDataSource, UITableViewDelegate,UIScrollViewDelegate
――で、スクロールビューコントローラとして機能するよう宣言しているので、記述する位置としては問題ないかと。

※今のMac持ってないので、昔の知識(AppKit時代)で話してます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。回答者さんがゆーようにxcodeでやっているため、storyboardも使っております。なので、コードだけの提示はわかりにくいと思いますが、何とぞご協力お願いいたします。
このままだと、セルが出された時にだけ出力されるのですが、そーではなく、スクロールした時に出力してほしいのですが、そのためには、cellの外で、funcするしかありません。しかし、funcの中身では、pageやscrollと言った変数宣言?をしたものを使っているため、変数宣言も外でやりたいのですが、それもできません。わかりにくい質問をして、もうわけございません。質問していただけると答えますので、ご協力お願いします。

お礼日時:2021/11/02 21:40

単にローカル関数なりローカルプロシージャの



func scrollViewDidEndDecelerating(scrollView: UIScrollView) {

 page.currentPage = Int(scroll.contentOffset.x / scroll.frame.maxX)
}

を定義してるだけ、で呼び出してねぇだけ、なんじゃねぇの?

一般にローカル関数、ないしはローカルプロシージャを定義する場合、
(ぶっちゃけ、フツーは、C言語、及びその仲間みたいな非力な言語じゃない限り定義出来る)

func a() {
 func b() {
  何らかのbの動作
 }
 b() // ここでbを実行
}

みたいにせんと内側のローカル関数、ないしはローカルプロシージャは実行されません。
あなたの提示したコードだとローカル関数なりプロシージャが定義されてるだけで実行されてないです。
それだけなんじゃないですかね。
    • good
    • 0

func scrollViewDidEndDecelerating(scrollView: UIScrollView) {


page.currentPage = Int(scroll.contentOffset.x / scroll.frame.maxX)
}
を外に出して、
ここでは、
scrollViewDidEndDecelerating(scrollView: UIScrollView)
としてはどうでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
外に出す場合の問題点として、
page
scroll
と言った変数宣言?をしないと使えないものがあります。
なので、funcだけを外に出すと言うより、
let page= やlet scroll= なども外に出す必要があるのですが、そこが上手くいきません。なぜかというと、このUI scrollviewやUIpagecontrollは、デーブルセルの中に入っているからです。xcodeを使っているので、storyboardの詳細なども明かしたいのですが、画像が貼れないため、swiftのコードだけを貼らせていただいております。なかなか理解しにくい質問ではあるので、なにかわからないことがあれば質問お願いします。

お礼日時:2021/11/02 21:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!