Saya tidak tahu harus mulai dari mana, saya memiliki UICollectionView dengan banyak sel yang diisi dengan UIImage. Saya ingin setiap sel/UIImage melakukan tindakan berbeda dengan satu ketukan jari. Dapatkah seseorang mengarahkan saya ke arah yang benar di sini?
Tindakan yang saya miliki adalah @IBAction dari UIButton, saya tahu ingin melakukan tindakan itu pada sel di UICollectionView..
(Saya kira saya harus melakukan sesuatu dengan 'let cell = countryCollectionView.dequeueReusableCell'?
import UIKit
class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
@IBOutlet weak var soundsCollectionView: UICollectionView!
lazy var cv: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
var cc = UICollectionView(frame: .zero, collectionViewLayout: layout)
cc.translatesAutoresizingMaskIntoConstraints = false
cc.register(CustomCell.self, forCellWithReuseIdentifier: "CustomCell")
cc.delegate = self
cc.dataSource = self
cc.backgroundColor = .white
return cc
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.addSubview(cv)
cv.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
cv.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
cv.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
cv.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell
cell.tag = indexPath.row
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: 100)
}
}
class CustomCell: UICollectionViewCell {
lazy var centerImageView: UIImageView = {
var img = UIImageView()
img.translatesAutoresizingMaskIntoConstraints = false
img.image = UIImage(named: "1")
img.clipsToBounds = true
img.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handler(_:)))
tapGesture.numberOfTapsRequired = 1
img.addGestureRecognizer(tapGesture)
return img
}()
@objc private func handler(_ sender: UITapGestureRecognizer) {
print("tapped tag > ", self.tag)
}
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(centerImageView)
centerImageView.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
centerImageView.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
centerImageView.heightAnchor.constraint(equalToConstant: 80).isActive = true
centerImageView.widthAnchor.constraint(equalToConstant: 80).isActive = true
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
@IBAction func sound1(_ sender: UIButton) { if (self.tag == 0) { // I am first cell, so act like this. } else if (self.tag == 1) { // Second cell blah blah } }
Namun bagaimana cara mengonfigurasi setiap sel secara berbeda untuk melakukan sesuatu dengan satu ketukan jari? Misalnya gambar1: cetak (saya tombol 1) Dan gambar2: cetak (saya tombol 2) Sekali lagi, terima kasih atas waktunya! Sangat menghargai - person DeDe Schurk   schedule 13.07.2020UITapGestureRecognizer
untukUIImageView
diUICollectionViewCell
. Dalam gerakan ketuk#action
fungsi centangself.tag
sehingga Anda dapat mengatasinya jikatag == 0
jadi ini adalah gambar sel pertama. dan jikatag == 3
ini adalah 4. sel. Apakah kamu keberatan? - person eemrah   schedule 13.07.2020let tap = UITapGestureRecognizer(target: self, action: #selector(doubleTapped)) tap.numberOfTapsRequired = 2 view.addGestureRecognizer(tap)
ini di ViewController saya (viewDidLoad). Dan@objc func doubleTapped() { // do something here }
Tapi saya tidak mengerti apa yang Anda maksud denganself.tag
.. Apakah saya berada di jalur yang benar dengan kode di atas? Sekali lagi terima kasih Elia! - person DeDe Schurk   schedule 15.07.2020UICollectionViewCell
ke tag dan tag ini membantu Anda sel mana yang merupakan elemen mana di dalamUICollectionViewCell
. Saya mengedit jawaban saya sebagai contoh untuk Anda - person eemrah   schedule 15.07.2020img.image = UIImage(named: "1")
untuk kodenya, baris ini mengatakan Anda harus memiliki gambar dengan nama1
. jadi mungkin Anda harus menggunakan imageNames Anda sendiri? - person eemrah   schedule 20.07.2020let imageArray = [UIImage(named:"first"),UIImage(named:"second"),UIImage(named:"third"),UIImage(named:"fourth")]
dan dalam metodecellForRow
Anda harus memanggilmyCell.imageView.image = imageArray[indexPath.row]
atau cara Anda menangani sel Anda. Sebagai contoh saya dalam jawaban ini seharusnyacell.centerImageView.image = imageArray[indexPath.row]
. Anda harus mengetahui bahwa ``numberOfCount` harus sama denganimageArray
hitungan - person eemrah   schedule 20.07.2020cellForRow
? aku tak punya..? MaksudnyacellForItemAt
? - person DeDe Schurk   schedule 20.07.2020cellForItemAt
metode :) - person eemrah   schedule 20.07.2020func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell cell.centerImageView.image = countries[indexPath.row] cell.tag = indexPath.row return cell }
- person DeDe Schurk   schedule 20.07.2020