Rumah > Soal Jawab > teks badan
原文地址:链接描述
在这篇文章中有一个简单的项目叫 BeginnerCook Starter ,其中一个ViewController+.swift的文件中有这样一段代码:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if listView.subviews.count < herbs.count {
listView.viewWithTag(0)?.tag = 1000 //prevent confusion when looking up images
setupList()
}
}
listView.viewWithTag(0)?.tag = 1000 这一行代码到底有什么作用,他虽然加了注释我也不是很明白,求大神回答。
PHPz2017-04-17 17:32:46
Dia kemudiannya menggunakan teg bermula dari 0 untuk mengenal pasti setiap UIIamgeView
, jadi dia perlu menukar teg paparan yang 0 dalam listView (jenisnya UIScrollView
) untuk mengelakkan pertindihan dengan teg yang dia tambah kemudian .
Ternyata analisis di bawah ini tidak jelas Ideanya salah tetapi kesimpulannya betul. Dikemas kini seperti berikut:
Jumlah skor dan struktur: Kesimpulan asal adalah betul Pandangan yang tegnya ditukar daripada 0 kepada 1000 ialah bar skrol mendatar, tetapi ideanya salah. . . Walaupun ia tidak ditunjukkan dalam jawapan, saya akan menambahnya secara terperinci
Mula-mula tulis dua perkara yang boleh dipelajari daripada dokumen:
Perisytiharan tag
secara pantas adalah seperti ini: var tag: Int
Dan terdapat perenggan ini di bawah dokumen:
Perbincangan
Nilai lalai ialah 0. Anda boleh menetapkan nilai teg ini dan menggunakan nilai itu untuk mengenal pasti paparan kemudian.
Dapat dilihat di sini bahawa jenis teg bukan pilihan, yang bermaksud UIView
mesti mempunyai teg Perbincangan menunjukkan bahawa nilai lalai ialah 0.
Antara muka dalam soalan kini kelihatan seperti ini:
listView(UIScrollView): tag == 1000 // 1
|-横滚动条(UIView): tag == 0
Nota 1: Betul. . . Dia menetapkan teg listView kepada 1000 dalam StoryBoard, seperti yang ditunjukkan di bawah. Bar skrol mendatar tidak diubah suai di sini kerana sukar untuk menetapkan teg dalam StoryBoard. Ingat ini dan gunakannya dengan segera.
(tag di sudut kanan bawah = 1000)
Kemudian dokumen - viewWithTag:
mengandungi perenggan berikut
Perbincangan
Kaedah ini mencari paparan semasa dan semua subviewnya untuk paparan yang ditentukan.
Kaedah`viewWithTag:` mencari pandangan itu sendiri dan subviewnya.
Seperti yang dinyatakan di atas, teg listView telah ditukar kepada 1000 dalam StoryBoard Oleh itu, apabila melaksanakan listview.viewWithTag(0)
dalam soalan, perkara pertama yang ditemui bukanlah listView itu sendiri, tetapi bar skrol dalam subviewnya. Kemudian tukar teg bar skrol kepada 1000
Jadi kembali kepada kesimpulan sebelumnya, pandangan dengan tag 0 ialah:
Bar skrol mendatar XD. . .
Keupayaan saya untuk menyatakan diri saya terhad. . . Ia adalah perkara yang sangat mudah sehingga saya hampir berasa pening. Lebih baik saya berikan contoh:
Kod taman permainan dalam gambar:
import UIKit
let viewA = UIView(frame: CGRect(x: 0,y: 0,width: 30,height: 30))
let viewB = UIView(frame: CGRect(x: 0,y: 0,width: 20,height: 20))
viewA.backgroundColor = UIColor.darkGrayColor()
viewB.backgroundColor = UIColor.greenColor()
viewA.addSubview(viewB)
viewA
viewB
viewA.tag // 0 为了截图方便,不预览了
viewB.tag // 0 为了截图方便,不预览了
viewA.viewWithTag(0) // 现在获取到 viewA 自己
viewA.tag = 1000 // StroyBoard 中设置了 tag 为 1000
viewA.viewWithTag(0) // 获取到 viewB
viewA.viewWithTag(0)?.tag = 1000 // 把 viewB 的 tag 也改成 1000
viewA.viewWithTag(0) // 这时结果时 nil
// setupList()
let imageView0 = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
imageView0.backgroundColor = UIColor.redColor()
viewA.addSubview(imageView0)
viewA
viewA.viewWithTag(0) // 拿到了想要的 iamgeView0