在Swift中重新加载/更新视图

时间:2015-03-03 08:30:25

标签: ios iphone swift

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

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

3 个答案:

答案 0 :(得分:15)

如果您想要触发布局或只是绘图,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()
    }
}

答案 1 :(得分:0)

在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()
   }

答案 2 :(得分:-5)

如果他们不知道我们可以用一行简单的代码刷新整个视图,那么Swift已经真正地为自己提升了很多人。

viewWillAppear(true)