我一直对应分配给的任务类型有点不清楚viewDidLoad对比viewWillAppear:在一个UIViewController子类.
例如,我正在做一个应用程序,我有一个UIViewController子类命中服务器,获取数据,将其提供给视图,然后显示该视图.什么是这样做的利弊viewDidLoad对比viewWillAppear?
我把NSLog(@"%@::%@", [[self class] description], NSStringFromSelector(_cmd));两个viewDidLoad和viewDidUnload一个视图控制器.
在日志中,我发现viewDidLoad比viewDidUnload应用程序移入和移出不同的.nibs要多得多.
为什么?
底线是,我一直工作在一个应用程序,它似乎是,如果我把一个UIAlert在viewDidLoad,它被称为两次(从的委托方法UIImagePickerController).如果我把它放入viewDidAppear,它会被调用一次.
我查看了文档,但它让我很困惑.
我一直认为viewDidAppear只要你的视图出现在屏幕上就会被调用,但我被告知,例如,当你背景应用程序时(通过按下主页按钮)然后将其恢复原状,viewDidAppear不会被调用(进入后台) "不会从视图层次结构中删除当前视图").那么,对于"出现"的观点,它实际上意味着什么?此外,对于"加载"视图意味着什么,即.它何时实际发生(例如,通过触摸应用程序图标等打开应用程序时)
我想知道,一旦在导航控制器层次结构中的某个位置创建了一个视图控制器,是否在它之前已经加载后重新加载它时会重新加载吗?
我无法以编程方式移动按钮.
我在viewDidLoad中使用此代码,我不使用自动布局:
button.frame.origin = CGPoint(x: 0, y: 0)
Run Code Online (Sandbox Code Playgroud)
但是该按钮在运行时保持在屏幕上的原始位置.
奇怪的是,坐标实际上正在更新,但没有在屏幕上显示.
如果我运行以下代码:
print(button.frame.origin.x) // prints 45.0
button.frame.origin = CGPoint(x: 0, y: 0)
print(button.frame.origin.x) // prints 0.0
Run Code Online (Sandbox Code Playgroud)
但是在屏幕上按钮保持在45.
我究竟做错了什么?
我需要一个简单的警报,当视图加载到屏幕上时会弹出.我已经找到了一些关于如何创建弹出警报的教程,但它们都需要按下UI按钮.我需要它只是在视图加载时自动弹出.
这是我的代码的开始,但是我无法弄清楚如何调用代码而不必使用UIbutton操作:
override func viewDidLoad() {
super.viewDidLoad()
let alertController = UIAlertController(title: "Disclaimer", message:
"Hello, world!", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Accept", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud) 我怎么比较viewDidLoad和viewDidAppear:
ios ×7
objective-c ×3
iphone ×2
swift ×2
viewdidload ×2
alert ×1
cocoa-touch ×1
lifecycle ×1
popup ×1
xcode ×1