Как очистить текстовое поле в представлении после вызова popToViewController

#ios #objective-c #xcode #stack #poptoviewcontroller

#iOS #objective-c #xcode #стек #poptoviewcontroller

Вопрос:

У меня есть представление (ViewControllerA), в котором есть текстовое поле. Пользователь заполняет его и нажимает Далее. После выполнения нескольких шагов они завершают / отправляют все данные, и я хочу вернуть их обратно в ViewControllerA, но когда я это делаю, текстовое поле все еще заполнено. Я не хочу очищать viewWillAppear, потому что я хочу использовать встроенную функциональность кнопки возврата. Как я могу очистить это текстовое поле только после popToViewController?

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

Комментарии:

1. Не уверен, как вы подключаетесь к / обратно к соответствующему контроллеру, но обычно у этих вызовов есть блок завершения. Почему бы не поместить его туда или показать, как вы pop them back to vcA ?

2. добавлен код. может быть, есть лучший способ для меня использовать popToViewController?

3. Привет — на какую версию iOS вы ориентируетесь?

4. в настоящее время iOS 9.0

5. Хорошо — я делаю что-то подобное, используя dismissBlock … Я опубликую немного кода в качестве ответа.

Ответ №1:

Существует множество способов, которыми вы можете это сделать. То, что я публикую ниже, — это моя вторая попытка, которая, я думаю, здесь самая простая. Создайте блок в своем vc, что-то вроде

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

а затем используйте это, чтобы делать все, что вы хотите, при следующем появлении представления. В первый раз это будет равно нулю и не будет выполняться, затем при вызове опубликованного вами кода также сделайте что-то вроде

 __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 в разные места. Можно использовать делегат всплывающих окон, но я не думаю, что iOS 9 поддерживает это, тогда для всплывающих окон у вас также есть beingPresented / beingDismissed сообщения.