- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我慢慢下拉刷新时,它得到的新内容的顺序不正确。
此外,当我拉刷新时它所堆叠的触发器不会给出任何错误,它只是在 3 个单元格下加载新内容。
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableview: UITableView!
var url: String = "http://www.test.com/?json=get_recent_posts"
//var url: String = "http://www.test.com/wp-json/wp/v2/posts"
var refreshControl: UIRefreshControl = UIRefreshControl()
var posts: [Post]? = []
// Navigation
override func viewDidAppear(_ animated: Bool) {
let nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.black
self.navigationController?.navigationBar.barTintColor = UIColor.white
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
imageView.contentMode = .scaleAspectFit
let image = UIImage(named: "logo")
imageView.image = image
navigationItem.titleView = imageView
}
override func viewDidLoad() {
super.viewDidLoad()
func stringFromHTML( string: String?) -> NSAttributedString?
{
do {
let data = string?.data(using: String.Encoding.utf8, allowLossyConversion: true)
if let d = data {
let str = try NSAttributedString(data: d,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
return str
}
} catch {
}
return nil
}
fetchPosts()
// Refresh
refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Refresh")
refreshControl.addTarget(self, action: #selector(refresh), for: UIControlEvents.valueChanged)
tableview.addSubview(refreshControl) // not required when using UITableViewController
tableview.sendSubview(toBack: refreshControl)
refresh()
}
func refresh() {
//print("Refresh table")
fetchPosts()
}
func fetchPosts() {
if self.url == "" {
// print("no posts")
DispatchQueue.main.async {
if (self.refreshControl.isRefreshing) {
self.refreshControl.endRefreshing()
}
self.tableview.reloadData()
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
return
}
let urlRequest = URLRequest(url: URL(string: self.url)!)
let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in
if error != nil {
print(error!)
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]
if let postsFromJson = json["posts"] as? [[String:AnyObject]]
{
for post_json in postsFromJson {
let post = Post()
if let title = post_json["title"] as? String{
post.title = title
}
if let attachments = post_json["attachments"] as? [[String: AnyObject]] {
if let attachment = attachments[0] as? [String: AnyObject] {
if let imageUrl = attachment["url"] as? String {
post.imageUrl = imageUrl
}
}
}
if let content = post_json["content"] as? String {
post.content = content
}
self.posts?.append(post)
}
DispatchQueue.main.async {
self.tableview.reloadData()
}
}
} catch let error {
print(error)
}
}
task.resume()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "postsCell", for: indexPath) as! PostsCell
cell.title.text = self.posts?[indexPath.row].title
cell.imgView.downloadImage(from:(self.posts?[indexPath.row].imageUrl)!)
return cell
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.posts?.count ?? 0
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "showDetail") {
let DVC = segue.destination as! DetailViewController
if let indexpath = self.tableview.indexPathForSelectedRow {
let title = self.posts?[indexpath.row].title
DVC.title_text = title
DVC.img_url = self.posts?[indexpath.row].imageUrl
DVC.content_text = self.posts?[indexpath.row].content
}
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.tableview.reloadData()
}
}
extension UIImageView {
func downloadImage(from url: String){
let encoded_url = url.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
let urlRequest = URLRequest(url: URL(string: encoded_url!)!)
let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
if error != nil {
print(error!)
return
}
DispatchQueue.main.sync {
self.image = UIImage(data: data!)
}
}
task.resume()
}
}
最佳答案
UIRefreshControl 与数据的显示顺序无关, TableView 将渲染 0-n 的部分和行——无论数据来自哪里(数组、集合等)都需要应用排序逻辑到它。
关于ios - UIRefreshControl 未按正确顺序加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530819/
在我的 UIViewController , 我有一个 UITableView作为 subview 之一。我添加我的 UIRefreshControl使用以下代码: // enable "pull t
我在我的 TableView 中使用 UIRefreshControl 来提取新数据。但是当我定义控件时,下面的错误显示。我用谷歌搜索了一段时间,但没有找到任何有用的信息。 我使用 Xcode 版本
我正在尝试将 UIRefreshControl 移动到我的 headerView 之上,或者至少让它与 contentInset 一起使用。有谁知道如何使用它? 在 TableView 中滚动时,我使
我正在尝试在 UIViewController 中实现 UIRefreshControl。我无法使用 UITableViewController,因为 tableView 只是我的 viewContr
我需要创建一个完全自定义的 UIRefresh控制。动画、图像、下拉量等... 我最初的想法是从头开始,使用 UIViewController,向其中添加我自己的 View ,通过访问 UIScrol
我在 iOS 8 下实现 UIRefreshControl 时遇到了一种闪烁。每次我第一次到达 tableView 的顶部时(即应用程序刚刚启动时),我都会看到下面的 gif 中显示的闪烁。这不会发生
因此,我在 Storyboard 中启用了表格 View 的刷新功能,并将此代码放入 viewDidLoad() 中: refreshControl?.addTarget(self, action:
当我慢慢下拉刷新时,它得到的新内容的顺序不正确。 此外,当我拉刷新时它所堆叠的触发器不会给出任何错误,它只是在 3 个单元格下加载新内容。 import UIKit class ViewControl
我想触发refreshControl在tableView从服务器初始化其数据时自动显示,并且我在这个问题上尝试了多种方法 UIRefreshControl - beginRefreshing not
我已以编程方式将 UIRefreshControl 作为 subview 添加到我的 UICollectionView 中。 lazy var refreshControl: UIRefreshCon
我有一个包含用户帖子的表格 View 。每个帖子都有图片、用户名和帖子本身。刷新控件的操作是使用来自 Parse 的数据重新加载表。除了拉动刷新时的极度延迟外,一切都完美无缺。不知道是因为每个单元格里
目前,我有一个正在使用 UIRefreshControl 的应用程序。 不过我遇到了一些问题...... 这是我的代码: - (void)viewDidLoad { [super viewDi
我为 UICollectionView 实现了一个 UIRefreshControl,这样用户可以通过拉动来刷新 UICollectionView 中的内容。我正在 iPad 模拟器上进行测试。 在第
我有一个带有 TableView 和刷新控件的 View Controller 。当我在刷新过程中旋转屏幕时,刷新控制杆。我试图在 viewWillTransition 和 tableview.ref
我有一个 UITableView,它在 UIViewController 的委托(delegate)上添加了一个新项目,插入了行。该行已正确插入。 但是,之后拖动 UITableView 时,UITa
拉动刷新并没有消失。屏幕上只有 3 行可见,使用 print(indexPath.row) 后我可以看到它再次重新加载行 0、1、2,但刷新控件没有消失。 override func viewDidL
我在 UITableViewController 中有一个 UIRefreshControl。有什么方法可以检测用户是否开始向下拖动 View 以刷新内容?我指的不是 beginRefreshing
我的项目仍在使用 Swift 2.3,尚未迁移到 Swift 3。当我使用以下代码下拉 TableView 时,我可以验证在调试区域中可以看到刷新的数据,但它不会反射(reflect)在 TableV
我做了一个UIRefreshControl: refresher = UIRefreshControl() refresher.attributedTitle = NSAttributedString
今天刚开始使用“UIRefreshControl”,发现了一些奇怪的事情。 如果我在 InterfaceBuilder 中创建了 UIRefreshControl,并将其连接起来,我的选择器将永远不会
我是一名优秀的程序员,十分优秀!