【问题标题】:Pass a UIImage from photopicker to a previous ViewController将 UIImage 从 photopicker 传递到以前的 ViewController
【发布时间】:2017-01-05 20:33:35
【问题描述】:

我有两个 UIViewController,第一个 (A) 接受用户输入并询问他们是否要添加照片。如果他们点击“添加照片”按钮,则会将其推送到第二个 (B) 视图控制器。两个视图控制器都位于导航控制器内部,我只有从 A 到 B 的转场。我已经阅读了其他答案,但它们都使用 prepareToSegue,这需要从 B 转回 A,但这并没有真正起作用因为导航控制器。

我在这里附上我的两个视图控制器的屏幕截图。有没有更好的方法来做到这一点(模态)?我是用 Objective-C 写的。

【问题讨论】:

  • 你需要了解自定义委托

标签: ios objective-c uiimageview uiimage uiimagepickercontroller


【解决方案1】:

你可以使用 block 传回你想要的任何东西。在去 B 之前,设置块。然后在 B 中完成工作后,调用块并将 UIImage 作为参数发送。

【讨论】:

    【解决方案2】:

    在 B.h 控制器中,您需要在 b.h 声明上方创建 Protocol /delegate

    @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 
    }
    

    在上午你需要在推送之前设置这个委托

    bClassObject.delegate = self;

    并且也实现该方法

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

    【讨论】:

      【解决方案3】:

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

      1. 在 B 上使用委托。在 prepareForSegue 的 A 中设置 B 的委托。
      2. 将图片保存到 B 上的沙箱中,B 发布通知 (NSNotificationCenter) 告诉 A 从沙箱中拾取照片。
      3. 使用单例并将照片保存在内存中(如果照片很大,可能不太好)
      4. 对completionHandler 使用自定义块方法。

      一切都比较容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2017-11-08
        • 2021-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多