【问题标题】:Use IBOutlets on different ViewController storyboard在不同的 ViewController 故事板上使用 IBOutlets
【发布时间】:2012-11-25 23:23:24
【问题描述】:

我有一个带有两个不同 ViewController 的故事板应用程序。在第二个 ViewController 我有一个 UIImageView ,我想在第一个上调用那个 UIImageView 。我一直在寻找解决方案,但找不到任何适合我的方法。

@property(nonatomic, retain) IBOutlet UIImageView *pic;

我只想能够在另一个视图控制器上使用该 UIImageView。我希望你能帮助我。

【问题讨论】:

    标签: objective-c xcode uiimageview storyboard viewcontroller


    【解决方案1】:

    编辑:

    是的,你可以尝试设置你的 UIImageView 为 segue 做准备。我已经尝试过了,它似乎有效。你可以这样做:

    **我假设您要使用的控制器称为 NewViewController **我还假设您的 NewViewController 有一个名为 imageView 的 UIImageView

    -(void)prepareForSegue....
      {
       if ([segueIdentifier isEqual....])
           {
            NewViewController *newController=(NewViewController *)[segue destinationViewController];
    
            [[newViewController imageView]setImage:self.someUIImageFromCurrentClass];
            [[newViewController imageView]setNeedDisplay];
           }
      }
    

    是的,您必须在当前类中创建一个 UIImage(在本例中是 self.someUIImageFromCurrentClass)。关键是您正在从当前 ViewController(当前类)中获取图像并将其显示在您要使用的 ViewController 中。

    原文:

    -(void) prepareForSegue: (UIStoryboardSegue *)segue sender:(id)sender
    {
      if ([segue.identifier isEqualToString:@"your segue name"])
         {
           [segue.destinationViewController setYourUIImage:self.someImageFromCurrentClass];
         }
    }
    

    请务必为您要连接的控制器导入 .h 文件。

    其次,YourUIImage 是一个 UIImage,它在您要使用的控制器中公开声明(就像 Michael 提到的那样)。

    在目标控制器中,您需要获取该 UIImage 并将其设置为 UIImageView 的图像:

    [self.myImageView setImage:YourUIImage]; // <-- you can do this in ViewDidLoad or ViewWillAppear
    

    这应该会让你继续前进

    **另外我想值得一提的是,segue 总是会创建一个你正在 segue 的控制器的新实例,它在 segue 之前不存在,这就是你必须将图像传递给它的原因。

    【讨论】:

    • 感谢您的回答,但我有一个问题。如果我在 VC2 上有 UIImageView,我是否必须将代码放在 VC1 上?因为当我提到 UIImageView 时我遇到了一些错误。我是否必须在 VC1 上创建一个 UIImage 并将其放在“someImageFromCurrentClass”上。谢谢和抱歉,我对此有点新意:)
    • 我用更多信息编辑了我的答案,应该更清楚一些。如果有帮助,请给它投票
    • 我不能让它工作,你能把项目文件发给我吗?
    【解决方案2】:

    您不能在视图控制器 (VC) 之间使用插座,因为一个 VC 无法自动引用另一个插座。您必须公开允许进行所需操作的公共属性或方法,并找到某种方法从另一个 VC 传递对一个 VC 的引用。

    例如,如果您通过 segue 从一个 VC 传递到另一个 VC,则可以从prepareForSegueWithIdentifier: 中的源操作目标 VC 中的属性。

    【讨论】:

    • 您能说得更具体些吗?我无法让它工作,一个项目文件会对我有很大帮助。谢谢
    • 另一个答案已经很好地涵盖了这一点,所以我会看看那里。
    猜你喜欢
    • 2014-11-11
    • 2012-09-13
    • 2015-03-16
    • 1970-01-01
    • 2015-05-12
    • 2018-10-07
    • 2012-02-21
    • 2012-02-13
    • 2013-11-16
    相关资源
    最近更新 更多