Saya sedang membangun pembaca RSS menggunakan cepat dan perlu menerapkan tarikan untuk memuat kembali fungsionalitas.
Inilah cara saya mencoba melakukannya.
class FirstViewController: UIViewController,
UITableViewDelegate, UITableViewDataSource {
@IBOutlet var refresh: UIScreenEdgePanGestureRecognizer
@IBOutlet var newsCollect: UITableView
var activityIndicator:UIActivityIndicatorView? = nil
override func viewDidLoad() {
super.viewDidLoad()
self.newsCollect.scrollEnabled = true
// Do any additional setup after loading the view, typically from a nib.
if nCollect.news.count <= 2{
self.collectNews()
}
else{
self.removeActivityIndicator()
}
view.addGestureRecognizer(refresh)
}
@IBAction func reload(sender: UIScreenEdgePanGestureRecognizer) {
nCollect.news = News[]()
return newsCollect.reloadData()
}
Saya mendapatkan:
Properti 'self.refresh' tidak diinisialisasi pada panggilan super.init
Tolong bantu saya untuk memahami perilaku recognisers gerakan. Kode contoh yang berfungsi akan sangat membantu.
Terima kasih.
ios
swift
xcode
uirefreshcontrol
xrage
sumber
sumber
Jawaban:
Tarik untuk menyegarkan dibangun di iOS. Anda bisa melakukan ini dengan cepat
Pada titik tertentu Anda bisa mengakhiri penyegaran.
sumber
Solusi dengan storyboard dan cepat ...
1.) Buka file .storyboard Anda, pilih TableViewController di storyboard Anda dan "Aktifkan" Table View Controller - Refreshing fitur di Utilities.
2.) Buka Kelas UITableViewController terkait dan tambahkan baris berikut ke dalam viewDidLoad-Method.
Diedit untuk Swift 5.0:
ATAU dalam Swift 2.2:
3.) Tambahkan Metode berikut di atas viewDidLoad-Method
sumber
put self.tableView.reloadData()
danself.refreshControl?.endRefreshing()
dalam panggilan balik?reloadData()
ke dalam antrian utama untuk menyegarkan UI Anda secara instan:dispatch_async(dispatch_get_main_queue(),{ self.tableView.reloadData() });
Saya ingin menyebutkan fitur CUKUP COOL yang telah disertakan sejak iOS 10, yaitu:
Untuk saat ini, UIRefreshControl didukung langsung di masing-masing
UICollectionView
,UITableView
danUIScrollView
!Masing-masing dari pandangan ini memiliki properti instance refreshControl , yang berarti bahwa tidak perlu lagi menambahkannya sebagai subview dalam tampilan gulir Anda , yang harus Anda lakukan adalah:
Secara pribadi, saya merasa lebih alami untuk memperlakukannya sebagai properti untuk tampilan gulir lebih dari menambahkannya sebagai subview, terutama karena satu-satunya tampilan yang sesuai sebagai superview untuk UIRefreshControl adalah scrollview, yaitu fungsi menggunakan UIRefreshControl hanya berguna saat bekerja dengan tampilan gulir; Itu sebabnya pendekatan ini harus lebih jelas untuk mengatur tampilan kontrol penyegaran.
Namun, Anda masih memiliki opsi untuk menggunakan
addSubview
berbasis pada versi iOS:sumber
doSomething
fungsi breakpoint , jika bisa dijangkau maka Anda harus memeriksa kode Anda.Cepat 4
Dan Anda bisa berhenti menyegarkan dengan:
sumber
tableView.reloadData()
dalam contoh Anda!var refControl: UIRefreshControl{ let rfControl = UIRefreshControl() rfControl.attributedTitle = NSAttributedString(string: "") rfControl.tintColor = UIColor(red:0.16, green:0.68, blue:0.9, alpha:1) rfControl.addTarget(self, action: #selector(getNewMessageList), for: .valueChanged) return rfControl }
. Kemudian panggil endRefreshing (), itu tidak berfungsi (refreshcontrol masih menunjukkan di sana), tetapi ikuti jalan Anda, itu berhasil, tolong beri tahu saya mengapa?.valueChanged
acara tersebut dipicu? Saya tidak mengerti hubungan ini.Dalam Swift gunakan ini,
Jika Anda ingin menarik untuk menyegarkan di WebView,
Jadi coba kode ini:
sumber
Jawaban Anhil banyak membantu saya.
Namun, setelah bereksperimen lebih lanjut, saya memperhatikan bahwa solusi yang disarankan terkadang menyebabkan kesalahan UI yang tidak terlalu cantik .
Sebaliknya, pergi untuk pendekatan ini * melakukan trik untuk saya.
* Cepat 2.1
sumber
Apa kesalahan memberitahu Anda, adalah yang
refresh
tidak diinisialisasi. Perhatikan bahwa Anda memilih untuk membuatrefresh
tidak opsional, yang pada Swift berarti bahwa ia memiliki memiliki nilai sebelum Anda meneleponsuper.init
(atau itu secara implisit disebut, yang tampaknya menjadi kasus Anda). Entah membuatrefresh
opsional (mungkin apa yang Anda inginkan) atau inisialisasi dengan beberapa cara.Saya akan menyarankan membaca dokumentasi pengantar Swift lagi, yang mencakup ini sangat panjang.
Satu hal terakhir, bukan bagian dari jawaban, seperti yang ditunjukkan oleh @Anil, ada tarikan internal untuk menyegarkan kontrol di iOS yang disebut
UIRefresControl
, yang mungkin merupakan sesuatu yang layak untuk dilihat.sumber
Saya membangun aplikasi umpan RSS di mana saya memiliki Tarik untuk menyegarkan yang awalnya memiliki beberapa masalah yang tercantum di atas.
Tetapi untuk menambahkan jawaban pengguna di atas, saya mencari di mana-mana untuk kasus penggunaan saya dan tidak dapat menemukannya. Saya sedang mengunduh data dari web (RSSFeed) dan saya ingin menarik di atas meja saya Lihat cerita untuk menyegarkan.
Apa yang disebutkan di atas mencakup area yang tepat tetapi dengan beberapa masalah yang orang hadapi, inilah yang saya lakukan dan berhasil:
Saya mengambil pendekatan @Blankarsch dan pergi ke main.storyboard saya dan memilih tampilan tabel untuk menggunakan refresh, maka yang tidak disebutkan adalah membuat IBOutlet dan IBAction untuk menggunakan refresh secara efisien
Semoga ini bisa membantu siapa pun dalam situasi yang sama dengan saya
sumber
sumber
Detail
fitur
Larutan
Pemakaian
Sampel Lengkap
sumber
Cepat 5
sumber
Saya sarankan untuk membuat Extension of pull To Refresh untuk digunakan di setiap kelas.
1) Buat file cepat kosong: File - Baru - File - File Swift.
2) Tambahkan yang Berikut
3) Di Pengontrol Tampilan Anda panggil metode ini sebagai:
4) Pada titik tertentu Anda ingin mengakhiri penyegaran:
sumber
Untuk tarikan untuk menyegarkan saya gunakan
DGElasticPullToRefresh
https://github.com/gontovnik/DGElasticPullToRefresh
Instalasi
pod 'DGElasticPullToRefresh'
override func viewWillAppear (_ animated: Bool)
Dan jangan lupa untuk menghapus referensi sementara tampilan akan hilang
untuk menghapus tarik untuk menyegarkan masukkan kode ini ke Anda
override func viewDidDisappear (_ animated: Bool)
Dan akan terlihat seperti
Selamat coding :)
sumber
Anda dapat mencapai ini dengan menggunakan beberapa baris kode. Jadi mengapa Anda akan terjebak di perpustakaan pihak ketiga atau UI. Tarik untuk menyegarkan dibangun di iOS. Anda bisa melakukan ini dengan cepat
sumber
Anda bisa menggunakan subclass dari tableView ini:
Pembuat antarmuka 1 - in mengubah kelas tableView Anda menjadi
PullToRefreshTableView
atau membuatPullToRefreshTableView
program2 - mengimplementasikan
PullToRefreshTableViewDelegate
pengontrol tampilan Anda3 -
tableViewDidStartRefreshing(tableView: PullToRefreshTableView)
akan dipanggil di pengontrol tampilan Anda ketika tampilan tabel mulai menyegarkan4 - panggilan
yourTableView.endRefreshing()
untuk menyelesaikan penyegaransumber
Ini adalah bagaimana saya membuatnya bekerja menggunakan Xcode 7.2 yang menurut saya merupakan bug utama. Saya menggunakannya di dalam
UITableViewController
bagian dalam sayaviewWillAppear
Seperti yang Anda lihat, saya benar-benar harus memanggil
configureMessage()
metode setelah mengatur sayaUIRefreshControl
kemudian setelah itu, refresh berikutnya akan berfungsi dengan baik.sumber
Jawaban Lain Benar, Tetapi untuk Lebih Detail, periksa Tulisan ini Tarik untuk Menyegarkan
Saat Anda bekerja dengan UITableViewController, solusinya cukup sederhana: Pertama, Pilih pengontrol tampilan tabel di storyboard Anda, buka inspektur atribut, dan aktifkan penyegaran:
UITableViewController dilengkapi dengan referensi ke UIRefreshControl di luar kotak. Anda hanya perlu memasang beberapa hal untuk memulai dan menyelesaikan penyegaran saat pengguna menariknya.
Di override dari viewDidLoad (), tambahkan target untuk menangani refresh sebagai berikut:
refreshControl.endRefreshing()
Untuk informasi lebih lanjut Silakan pergi ke menyebutkan Tautan dan semua kredit masuk ke pos itu
sumber