调用popToViewController后如何清除视图中的文本框

Posted

技术标签:

【中文标题】调用popToViewController后如何清除视图中的文本框【英文标题】:How to clear a textbox in view after calling popToViewController 【发布时间】:2020-08-28 19:43:47 【问题描述】:

我有一个带有文本框的视图 (viewControllerA)。用户填充它并单击下一步。完成几个步骤后,他们完成/提交所有数据,我想将它们弹出回 viewControllerA,但是当我这样做时,文本框仍然被填充。我不想清除 viewWillAppear 因为我想使用内置的后退按钮功能。如何仅在 popToViewController 之后清除该文本框?

[rootController popToViewController:rootController.transferScanPartView animated:YES];

【问题讨论】:

不确定如何弹出/返回相关控制器,但通常这些调用有一个完成块。为什么不把它放在那里或展示你如何pop them back to vcA 添加了代码。也许我有更好的方法来利用 popToViewController? 嗨 - 你的目标是什么 ios 版本? 目前 iOS 9.0 好的 - 我用dismissBlock做类似的事情......我会发布一些代码作为答案。 【参考方案1】:

您可以通过多种方式执行此操作。我在下面发布的是我的第二次尝试,我认为这里最简单。在你的vc中有一个块,比如

@property (nonatomic,strong) void ( ^ appearBlock )();

然后在下次视图出现时使用它来做任何你想做的事情。第一次这将是 nil 并且不会执行,然后当您调用您发布的代码时也会执行类似的操作

__weak myVc * weakSelf = self;
self.appearBlock = ^  weakSelf.edit.text = nil; ;
// Code you posted, where you present your popover
[rootController popToViewController...

在你看来WillAppear

- ( void ) viewWillAppear ...

  [super viewWillAppear...

  if ( self.appearBlock )
  
    // Execute block
    self.appearBlock();

    // Ensure we never call it again
    self.appearBlock = nil;
  

  .. rest of view will appear ..

编辑

这里的麻烦在于,根据您使用的 iOS 以及您呈现 vc 的方式,在呈现或关闭视图时会调用或不调用许多东西。

视情况而定,您可能必须将对 appearBlock 的呼叫转移到不同的地方。可以使用弹出框委托,但我认为 iOS 9 不支持,然后对于弹出框,您还可以使用 beingPresented / beingDismissed 消息。

【讨论】:

以上是关于调用popToViewController后如何清除视图中的文本框的主要内容,如果未能解决你的问题,请参考以下文章

popToViewController 不工作

vue返回之后如何让变量清0

applicationDidEnterBackground 触发 popToViewController

popToViewController 生命周期

Linux系统的C语言怎么清屏?

navigationController popToViewController 不能在 swift 3 中工作