将一个UIImage从photopicker传递给之前的ViewController

时间:2017-01-05 20:33:36

标签: ios objective-c uiimageview uiimage uiimagepickercontroller

我有两个UIViewControllers,第一个(A)接受用户输入并询问他们是否想要添加照片。如果他们点按了"添加照片"按钮,被推到第二个(B)viewcontroller。两个视图控制器都存在于导航控制器内部,我只有一个从A到B的segue。我已经读过其他答案,但是他们都使用prepareToSegue,这需要从B回到A的segue,但这并不是因为导航控制器真的有效。

我在这里附上了我的两个viewcontrollers的屏幕截图。有没有更好的方法(模态)?我在Objective-C中写这篇文章。

viewcontroller

3 个答案:

答案 0 :(得分: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!");
}

答案 1 :(得分:0)

您可以使用块传回任何您想要的内容。在转到B之前,设置块。然后在B中完成你的工作时,调用块并将UIImage作为参数发送。

答案 2 :(得分:0)

实现这一目标的很多方法。

  
      
  1. 使用委托B.在prepareForSegue中设置B的委托。
  2.   
  3. 将图像保存到B上的沙箱,B postNotification(NSNotificationCenter)告诉A从沙箱中拾取照片。
  4.   
  5. 使用单身并将照片留在记忆中(如果照片很大,可能不太好)
  6.   
  7. 使用自定义块方法和completionHandler。
  8.   

一切都相对容易。