我正在开发一个股票市场应用程序,其中我必须显示一些索引值,这些索引值在导航栏中的市场营业时间内使用套接字连接进行更新。
此功能在应用程序的所有屏幕中都很常见。
我已经将UINavigationController子类化,并在.xib文件中设计了一个视图,以显示viewDidLoad
中的索引值,并将其添加为子视图。
(我使用的是swift 3.1)
let width = self.view.frame.width - 100.0
let frame = CGRect(x: 50, y: 25, width: width, height: 44)
viewNavigation = NavigationView(frame: frame)
self.view.addSubview(viewNavigation!)
还有其他更好的方法来实现此功能吗?
答案 0 :(得分:0)
这对我来说似乎并不好。
将window.rootViewController
设置为UINavigationController
是一个很好的做法。它仍然可以包含其他子UINavigationController
然而,你的NavigationView是关于什么的?如果您直接在navigationController
视图属性中添加子视图,那么这不是预期的行为,您可能会发生一些未定义的行为。
按照您编辑的答案和评论:
是的,我认为您应该使用UINavigationBar
自定义titleView
。
您可以在不同的viewController中轻松设置它或一次:
self.navBar.topItem?.titleView = NavigationView(frame: frame)
答案 1 :(得分:0)
我认为您可以创建UIViewController子类并添加方法来显示和隐藏或更改值。请看这个例子。
BaseViewControler是UIViewController上的子类
在BaseViewController上编写如下方法
func addNavigationTitileView() {
// add your code to show your value
}
现在调用viewWillAppear
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
addNavigationTitileView()
}
现在您需要创建View Controller子类化BaseViewController。它会自动添加带有更改的导航栏。
为您的示例更好地更改navigationTitleView
假设您要在导航栏上显示动态值。使用上述方法,每次进入视图控制器时都很容易更新。
现在想想你不想为某些视图控制器添加它,你有两个选择。
如果要实时更改文本,则需要使用需要使用NSNotificationCenter的addObserver 见Notification center method method called multiple time ios in Tab bar (View controller)? How to remove observer?
这样实现, 您需要在baseviewController viewWillAppear方法上注册Observer并在viewWillDisappear方法中删除它。
在Observer方法中,您可以设置要显示的值。