All*_*len 24 viewdidappear ios
我想检查粘贴板并在视图出现时显示警告(如果它包含特定值).我可以将代码放入viewDidLoad以确保它只被调用一次,但问题是警报视图显示得太快.我知道我可以设置一个计时器来推迟警报的外观,但我认为这不是一个好的解决方法.
我检查了问题iOS 7 - viewDidLoad和viewDidAppear之间的区别,发现有一个步骤可以检查视图是否存在.所以我想知道这样做是否有任何api?
更新:"仅一次"表示视图控制器实例的生命周期.
rma*_*ddy 63
您可以使用标准的内置方法.
Objective-C的:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if ([self isBeingPresented] || [self isMovingToParentViewController]) {
// Perform an action that will only be done once
}
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特3:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if self.isBeingPresented || self.isMovingToParentViewController {
// Perform an action that will only be done once
}
}
Run Code Online (Sandbox Code Playgroud)
isBeingPresented当视图控制器首次显示为模态显示的结果时,调用为true.isMovingToParentViewController首次将视图控制器推入导航堆栈时为true.第一次出现视图控制器时,其中一个将成立.
无需处理BOOLivars或任何其他技巧来跟踪第一个电话.
rmaddy的答案非常好,但是当视图控制器是导航控制器的根视图控制器以及所有其他未将这些标志传递给其子视图控制器的容器时,它无法解决问题.
所以这种情况我最好使用一个标志并在以后使用它.
@interface SomeViewController()
{
BOOL isfirstAppeareanceExecutionDone;
}
@end
@implementation SomeViewController
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(isfirstAppeareanceExecutionDone == NO) {
// Do your stuff
isfirstAppeareanceExecutionDone = YES;
}
}
@end
Run Code Online (Sandbox Code Playgroud)
如果我正确理解你的问题,你可以简单地设置一个 BOOL 变量来识别 viewDidAppear 已经被调用,例如:
- (void)viewDidAppear {
if (!self.viewHasBeenSet) { // <-- BOOL default value equals NO
// Perform whatever code you'd like to perform
// the first time viewDidAppear is called
self.viewHasBeenSet = YES;
}
}
Run Code Online (Sandbox Code Playgroud)
Muh*_*ati -1
您可以在 ViewDidLoad 方法中使用此函数
执行选择器:withObject:延迟后:
它会在延迟后调用该函数。因此您不必使用任何自定义计时器对象。一次你可以使用
dispatch_once DCD 块。只需在dispatch_once 块中执行Selector,当调用ViewDidLoad 时,它只会调用一次performSelector
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
8953 次 |
| 最近记录: |