在 Swift 中重新加载/更新视图
Posted
技术标签:
【中文标题】在 Swift 中重新加载/更新视图【英文标题】:Reload/Update View In Swift 【发布时间】:2015-03-03 08:30:25 【问题描述】:我正忙着制作带有帐户页面的应用程序。我希望用户可以通过该页面登录,并且一旦他们成功登录,页面就会重新加载以显示他们的帐户信息,而不是说明他们必须登录才能使用该页面的标准消息。
但是,当我从登录视图返回帐户页面时,视图并没有真正更新。因此,我想知道在按下某些按钮后是否无法重新加载视图,这些按钮可以再次检查用户是否登录并进行相应处理。
【问题讨论】:
【参考方案1】:如果你想触发布局或只是绘制有setNeedsLayout
和setNeedsDisplay
没有重新加载自定义数据的内置方法(在 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 函数中,在这种情况下,您不妨创建一个不同的函数并调用该函数。以上是关于在 Swift 中重新加载/更新视图的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView (swift2) 中选择单元格时更新/重新加载 ViewController
从 AppDelegate Swift 4 更新 tableView 行