ios – 如何使用视图控制器重新加载tableview(swift)

ios – 如何使用视图控制器重新加载tableview(swift),第1张

概述我对此很陌生.我花了几个小时来讨论关于这个主题的各种问题,但找不到适合我的问题的答案. 我有一个viewcontroller(不是tableviewcontroller)与tableview作为子视图.我的问题是如何在视图控制器的:viewwillappear方法中重新加载表数据.在方法内部,我无法“访问”tableview实例. (另外我理解我不能使用reloaddata()因为我不使用tabl 我对此很陌生.我花了几个小时来讨论关于这个主题的各种问题,但找不到适合我的问题的答案.

我有一个vIEwcontroller(不是tablevIEwcontroller)与tablevIEw作为子视图.我的问题是如何在视图控制器的:vIEwwillappear方法中重新加载表数据.在方法内部,我无法“访问”tablevIEw实例. (另外我理解我不能使用reloaddata()因为我不使用tablevIEwcontroller).

你知道任何简单的解决方案吗? (我非常假设一个协议可以帮助吗?)

这是简短的代码:

class VIEwController3: UIVIEwController,UItableVIEwDataSource,UItableVIEwDelegate {    var Person_data = [Person]()    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        let tb: UItableVIEw = UItableVIEw(frame: CGRect(x: 10,y: 50,wIDth: 200,height:600),style: UItableVIEwStyle.Plain)        tb.dataSource = self        tb.delegate = self        super.vIEw.addSubvIEw(tb)        fetch_data()    }        func tableVIEw(tablevIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {            let rows = Person_data.count            return rows        }       func tableVIEw(tableVIEw: UItableVIEw,cellForRowAtIndexPath indexPath: NSIndexPath) -> UItableVIEwCell        {              let cell: UItableVIEwCell = UItableVIEwCell()            cell.textLabel?.text = Person_data[indexPath.row].name            return cell        }    overrIDe func vIEwWillAppear(animated: Bool) {        super.vIEwWillAppear(animated)        fetch_data()            // reload at this point    }     func fetch_data() {       let tb_fetchRequest = NSFetchRequest(entityname: "Person")        do {            let tb_fetchResults = try my_moc.executeFetchRequest(tb_fetchRequest) as? [Person]            Person_data = tb_fetchResults!        } catch let error as NSError {                print("request error: \(error)")            }        }    }
解决方法 你的问题是tb是一个局部变量,所以它在vIEwDIDLoad()之外是不可见的.

如果你使tb成为视图控制器的属性(a.k.a.实例变量),那么你可以从任何控制器的方法中使用它:

class VIEwController3: UIVIEwController,UItableVIEwDelegate {    var Person_data = [Person]()    private var tb: UItableVIEw?  // Now the scope of tb is all of VIEwController3...    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        // ...so it is visible here...        tb = UItableVIEw(frame: CGRect(x: 10,style: UItableVIEwStyle.Plain)        ...    }    overrIDe func vIEwWillAppear(animated: Bool) {        super.vIEwWillAppear(animated)        fetch_data()              tb?.reloadData()   // ...and it is also visible here.    }

请注意,在您的代码中,tb是局部变量这一事实并不意味着当vIEwDIDLoad()完成时您的UItableVIEw对象就会消失.这意味着您对UItableVIEw的引用消失了.表视图对象本身仍然存在,因为它已添加到视图层次结构中,但由于变量超出范围,因此您不再引用它.

要进一步阅读变量与它们引用的对象之间的区别,请搜索“范围”和“按引用传递”.

总结

以上是内存溢出为你收集整理的ios – 如何使用视图控制器重新加载tableview(swift)全部内容,希望文章能够帮你解决ios – 如何使用视图控制器重新加载tableview(swift)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1014414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存