ios - 如何在 viewDidAppear 中只执行一次?

标签 ios viewdidappear

我想检查粘贴板,并在 View 出现时如果它包含特定值则显示警报。我可以将代码放入 viewDidLoad 中以确保它只被调用一次,但问题是警报 View 显示得太快。我知道我可以设置一个计时器来推迟警报的出现,但我认为这不是一个好的解决方法。

我检查了问题iOS 7 - Difference between viewDidLoad and viewDidAppear发现有一个步骤来检查 View 是否存在。所以我想知道是否有任何API可以做到这一点?

更新:“仅一次”意味着 View Controller 实例的生命周期

最佳答案

您可以使用一个标准的内置方法来实现此目的。

objective-C :

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    if ([self isBeingPresented] || [self isMovingToParentViewController]) {
        // Perform an action that will only be done once
    }
}

swift 3:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    if self.isBeingPresented || self.isMovingToParentViewController {
        // Perform an action that will only be done once
    }
}

当 View Controller 由于模态显示而首次显示时,对 isBeingPresented 的调用为 true。当 View Controller 首次被推送到导航堆栈时,isMovingToParentViewController 为 true。 View Controller 第一次出现时,两者之一为真。

无需处理 BOOL ivars 或任何其他技巧来跟踪第一个调用。

关于ios - 如何在 viewDidAppear 中只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45749663/

相关文章:

c++ - Ofstream::write 写入额外字节,尽管有显式源数组

ios - 如何在 iOS + Swift 中关闭我的应用程序的互联网访问

ios - 如何使用定义宏 iOS

ios - viewDidLoad 与 viewDidAppear - 名称标签问题

ios - "[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]"使UI无响应

ios - 在 ios 中异步调用 Web 服务

iphone - 在向僵尸对象发送消息时导致 iOS 应用程序立即停止的断点?

objective-c - viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear 指南

IOS 错误约束 ViewDidAppear 与 ViewDidLoad

ios - 在 iOS5.1/6 中,presentViewController 和 viewDidAppear 没有被调用