【问题标题】:Reload/Update View In Swift在 Swift 中重新加载/更新视图
【发布时间】:2015-03-03 08:30:25
【问题描述】:

我正忙着制作带有帐户页面的应用程序。我希望用户可以通过该页面登录,并且一旦他们成功登录,页面就会重新加载以显示他们的帐户信息,而不是说明他们必须登录才能使用该页面的标准消息。

但是,当我从登录视图返回帐户页面时,视图并没有真正更新。因此,我想知道在按下某些按钮后是否无法重新加载视图,这些按钮可以再次检查用户是否登录并进行相应处理。

【问题讨论】:

    标签: ios iphone swift


    【解决方案1】:

    如果你想触发布局或只是绘制有setNeedsLayoutsetNeedsDisplay

    没有重新加载自定义数据的内置方法(在 iOS 上)


    重新加载并在重新加载内部进行 - 调用 setNeedsDisplay

    import UIKit
    
    protocol MyViewDelegate {
        func viewString() -> String;
    }
    
    class MyView : UIView {
        var myViewDelegate : MyViewDelegate?
        private var str : String?
    
        func reloadData() {
            if myViewDelegate != nil {
                str = myViewDelegate!.viewString()
            }
            self.setNeedsDisplay()
        }
    
        override func drawRect(rect: CGRect) {
            UIColor.whiteColor().setFill()
            UIRectFill(self.bounds)
            if str != nil {
                let ns = str! as NSString
                ns.drawInRect(self.bounds, withAttributes: [NSForegroundColorAttributeName: UIColor.blueColor(), NSFontAttributeName: UIFont.systemFontOfSize(10)])
            }
        }
    }
    
    
    class ViewController: UIViewController, MyViewDelegate {
        func viewString() -> String {
            return "blabla"
        }
    
        var v : MyView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            v = MyView(frame: self.view.bounds)
            self.view.addSubview(v)
    
            v.myViewDelegate = self;
        }
    
        override func viewWillAppear(animated: Bool) {
            v.reloadData()
        }
    }
    

    【讨论】:

    • 你认为你可以给我举个例子吗,因为我不完全理解你的意思。
    • 谢谢你,这帮了我很大的忙,我现在开始工作了!
    【解决方案2】:

    在 Swift 中使用这个,

    如果你想重新加载 viewController 中的 UIView,只需使用 NotificationCenter。

    在 ViewController 类中添加 viewWillAppear

        override func viewWillAppear(_ animated: Bool)  {
           //Trigger notification
           NotificationCenter.default.post(name: NSNotification.Name(rawValue: "update"), object: nil)
    
            }
    

    在 UIView 类中为通知添加观察者

     required init?(coder aDecoder: NSCoder) {
         //Add Observer
          NotificationCenter.default.addObserver(self, selector: #selector(updateList), name: NSNotification.Name(rawValue: "update"), object: nil)
    
       }
    
     @objc func updateList(){
        //write Reload data here......
          tableView.reloadData()
       }
    

    【讨论】:

    • 它只会重新加载 tableView,而不是整个视图。
    【解决方案3】:

    Swift 本身已经非常先进,对于许多人来说,如果他们不知道我们只需一行简单的代码就可以刷新整个视图。

    viewWillAppear(true)

    【讨论】:

    • 我已经有一段时间没能玩 Swift 了,但即便如此,我很确定这不会起作用,除非你把所有的刷新逻辑都放在 viewWillAppear 函数中,在这种情况下,您不妨创建一个不同的函数并调用该函数。
    猜你喜欢
    • 2023-04-08
    • 2018-12-24
    • 2021-07-18
    • 2015-09-21
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多