-2

У меня есть два UIViewControllers, первый (A) принимает вход пользователя и спрашивает, хотят ли они добавить фотографию. Если они нажмете кнопку «добавить фотографию», они будут переведены во второй (B) viewcontroller. Оба контроллера просмотра живут внутри навигационного контроллера, и у меня есть только сеанс от A до B. Я читал другие ответы, но все они используют prepareToSegue, для чего требуется отступ от B до A, но на самом деле это не работает из-за навигационного контроллера.Пропустите UIImage от фотопикера до предыдущего ViewController

У меня есть скриншот моих двух контрольных точек здесь. Есть ли лучший способ сделать это (модально)? Я пишу это в Objective-C.

viewcontroller

+1

вам необходимо прочитать о пользовательском делетете –

ответ

0

В контроллере B.h вам необходимо создать протокол/делегат выше b.h декларации

@protocol MyClassImageReturnDelegate <NSObject> //define delegate protocol 
- (void) myClassDelegateMethodThatReturnsImage: (UIImage *) image; //define delegate method to be implemented within another class 
@end 

В B.h

@property (nonatomic, weak) id <MyClassDelegate> delegate; //define MyClassDelegate 

В B.m

- (void) myMethodToReturnImageAndGoBack { 
[self.navigationController popViewControllerAnimated:YES]; 
[self.delegate myClassDelegateMethod:imageThatNeedToreturn]; //this 
} 

В a.m вам необходимо установить этот делегат перед отправкой

bClassObject.delegate = self;

, а также реализовать этот метод, а

- (void) myClassDelegateMethodThatReturnsImage: (UIImage *) image { 
NSLog(@"Delegates are great!"); 
} 
0

Вы можете использовать блок, чтобы пройти обратно все, что вы хотите. Перед тем, как перейти в B, установите блок. Затем, когда закончите свою работу в B, вызовите блок и отправьте UIImage в качестве параметра.

0

Многие способы достижения этого.

  1. Используйте делегат от B. Установите делегат B в А в prepareForSegue.
  2. Сохраните изображение в песочнице на B и B postNotification (NSNotificationCenter), чтобы сообщить A, чтобы получить фотографию из песочницы.
  3. Использовать singleton и иметь фотографию в памяти (возможно, не очень хорошо, если фотография большая)
  4. Использовать специальный метод блокировки с завершениемHandler.

Все относительно легко.

Смежные вопросы