#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
сообщения.