添加 JSON 数据时 UITableView 不起作用

Posted

技术标签:

【中文标题】添加 JSON 数据时 UITableView 不起作用【英文标题】:UITableView not working when adding JSON data 【发布时间】:2017-06-26 18:30:22 【问题描述】:

我正在尝试使用从 imgur 获得的一些 JSON 数据加载表格视图。我可以向我的后端发出请求并获取 imgur 数据,将其吐回给我,然后我可以填充表格。但是,我遇到了这个非常奇怪的问题,数据最后被截断。 Here 是一张图片。如果我尝试进行另一次搜索,它不会将更多数据加载到表中,所以很明显我在执行此操作时会破坏它。我真的不知道我做错了什么。我也试图让它在某个时候可以用模态框点击,并且出队可重用单元格可能也不正确,但我想我会在这个问题之后到达那里。

无论如何,我们将不胜感激。

class ViewController3: UIViewController, UITextFieldDelegate,UITableViewDataSource 

    var dataState: Data?

    var linkArray = [String]()
    var titleArray = [String]()

    @IBOutlet weak var tableView: UITableView!

    @IBOutlet weak var SearchTextField: UITextField!

    @IBAction func SearchButton(_ sender: Any) 

        let urlString = "http://localhost:3000/getimages"


        Alamofire.request(urlString, method: .post, parameters: ["search": SearchTextField.text!],encoding: JSONEncoding.default, headers: nil).responseJSON 
            response in
            switch response.result 
            case .success:
                let json = JSON(response.data!)


                for (_, subJson) in json["data"] 
                    if let link = subJson["link"].string 
                       self.linkArray.append(link)
                    
                    if let title = subJson["title"].string
                        self.titleArray.append(title)
                    
                
                print("this is linkArray ", self.linkArray)
                print("this is titleArray ", self.titleArray)
                self.dataUpdated()
                break
            case .failure(let error):
                print(error)
            
        


    


    @IBAction func BackToTabControl(_ sender: Any) 
        let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        let tabBarVC = storyBoard.instantiateViewController(withIdentifier: "tabBarController") as! UITabBarController

        if let vc1 = tabBarVC.viewControllers?.first as? ViewController1 
            vc1.dataState = dataState
        

        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = tabBarVC
    

    func textFieldShouldReturn(_ textField: UITextField) -> Bool 
        textField.resignFirstResponder()
        return true
    

    override func viewDidLoad() 
        super.viewDidLoad()
        self.tableView.bounces = true
        SearchTextField.returnKeyType = UIReturnKeyType.done
        SearchTextField.delegate = self
        tableView.dataSource = self

    

    func numberOfSections(in tableView: UITableView) -> Int 
        return 1
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return titleArray.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellReuseIdentifier")! //1.

        let text = titleArray[indexPath.row] //2.

        cell.textLabel?.text = text //3.

        return cell //4.
    

    func dataUpdated() 
        DispatchQueue.main.async 
            self.tableView.reloadData()
        
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
    


【问题讨论】:

看起来像一个(自动)布局问题。 你是否为原型单元设置了约束,先做然后再运行,肯定是它的自动布局问题 我不是一个很聪明的人。我该怎么做?在我看到的约束菜单中 (imgur.com/a/GDsub) 我没有看到设置该约束的地方(即原型单元格)。 【参考方案1】:

尝试下一个:

    if let label = cell.textLabel 
        label.text = text
        label.sizeToFit()
    

【讨论】:

【参考方案2】:

您必须在 tableview 中单击并按住才能使其在模拟器中滚动.....显然我不知道这一点。谢谢你们的帮助。

【讨论】:

以上是关于添加 JSON 数据时 UITableView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 的 JSON 数据仍然为空

在 UITableView 中的 iPhone 上异步加载 JSON

如何在iOS中的UITableView的最后一行添加一行字符串?

UITableView 中未加载 JSON 数据

UITableView 不使用 SwiftyJSON 和 Alamofire 加载数据

使用 Objective-C 到 UITableView 的 JSON 数据