【问题标题】:TableView disappears after segue unwind在segue展开后TableView消失
【发布时间】:2017-12-26 06:14:18
【问题描述】:

我花了一整天的时间试图弄清楚这一点,想了解一下这里发生了什么:

我有一个自定义的UITableViewController,它嵌入在navigation controller 中,它有一个按钮可以触发到普通UIViewController 的转场。

普通的UIViewController 有一个展开到TableViewController 的按钮,以及一个感谢navigation controller 免费提供的“返回”按钮。

现在的问题是:当我从TableViewController 转到UIViewController 时,一切正常。从UIViewController 开始,如果我按下“后退”按钮,它会倒回并自动重新加载TableView。但是,当我按下链接到@IBAction 的按钮展开时,它会展开到TableViewController,但什么也没有出现,甚至没有一张空桌子。

我的调试视图显示,一旦我尝试使用按钮(不是“返回”)放松,TableViewController 又回到屏幕上,但它的框架非常小,里面什么都没有,所以navigation controller 的黑色背景正在显示,因此表格应该是黑屏。

谁能告诉我如何在我放松时手动重新初始化tableView 或重置TableViewController?我在viewDidAppear() 中尝试了tableView.reload() 并没有发生任何事情,因为我怀疑问题是TableViewController 本身没有像segueing 之前那样的原始帧。

Link to screenshots with descriptions

TableViewController 代码:

class StatsTableViewController: UITableViewController {
    //variable stuff

    @IBAction func unwindToRoot(_ sender: UIStoryboardSegue) {
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.getData()
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        DispatchQueue.main.async {
            self.tableView.reloadData()
        }
        self.getData()
    }   

    // MARK: - Table view data source

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

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return solves.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! StatsTableViewCell
        cell.timeLabel?.text = solves[indexPath.row].0
        cell.scrambleLabel?.text = solves[indexPath.row].1
        return cell
    }

    //other stuff
}

【问题讨论】:

    标签: swift uitableview uiviewcontroller uinavigationcontroller uistoryboardsegue


    【解决方案1】:

    设置委托数据源方法
    //在viewDidLoad()中添加这两行

    override func viewDidLoad() {
                super.viewDidLoad()
                self.getData()
    
            //Add this line
            self.UITableViewName.delegate = self
            self.UITableViewName.dataSource = self
    
        }
    

    【讨论】:

    • 不起作用,委托和数据源已在情节提要中链接。另外,据我了解,当展开时 viewDidLoad() 未被调用,它是 viewDidAppear() 被调用
    【解决方案2】:

    你在statusTableViewController中使用了这两种方法

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
                if segue.identifier == "SelectionSegue" {
                    //Your code
                }
            }
    
            @IBAction func unwindToThisView(sender: UIStoryboardSegue) {
                // set Delegate datasource method
            }
    

    设置 unwindToThisView 按钮的出口以查看图像

    1.单击最后一个 ViewController 的退出按钮

    查看返回按钮的展示 Segues 出口


    设置后退按钮的操作

    【讨论】:

    • 当我检查我的故事板时,动作已经设置好了,你能详细说明一下“设置 unwindToThisView 按钮以查看图像的出口”是什么意思吗?
    • 将上述代码放在您的 StatusTableViewController.swift 中并转到 storyBoard 单击另一个 Viewcontroller 退出按钮,您将看到像第二张图像一样呈现 Segues,然后单击并拖动以设置后退按钮的操作。 @dinosaysrawr
    • 退出已经完成,动作确实显示出来并返回到tableviewcontroller,但是tableview没有显示出来。当我检查布尔值时,它说 tableview 已加载,但没有显示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多