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

问题描述

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

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

解决方法

您可以通过多种方式执行此操作。我在下面发布的是我的第二次尝试,我认为这是最简单的。在您的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...

并在您的视图中会出现

- ( 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的呼叫移到其他位置。可以使用popover委托,但我认为iOS 9不支持该委托,那么对于popover,您还会收到beingPresented / beingDismissed消息。