【问题标题】:Setting UIImageView image from ViewController从 ViewController 设置 UIImageView 图像
【发布时间】:2023-03-19 05:07:01
【问题描述】:

这里有 iPhone n00b,虽然我在商店里有一个应用程序。

我有两个简单的 ViewController,直接取自 xCode 中的 Utility Application 模板。我有两个UIImageViews,一个在情节提要的每个 ViewController 上。我已经正确连接了插座(据我所知),因为我可以很好地设置 first ViewController 的图像

[self.imageView setImage:@"test.png"]

当我尝试在 FlipsideViewController 中做基本相同的事情时,什么也没有发生。

- (void)selectImage:(UIImage *)img
{
    NSLog(@"%@", img);
    self.editImageView.image = img;
    NSLog(@"%@", self.editImageView.image);
}

这段代码在记录第一条NSLog 语句后给出了正确的结果,但第二行没有达到预期的效果,第三行产生(null)

编辑:coed 已更新以反映我想显示“img”而不是使用 imageNamed 初始化的另一个图像这一事实,这只是一个测试。

【问题讨论】:

    标签: iphone objective-c ios xcode uiimageview


    【解决方案1】:

    如果您将UIImage 传递给您的方法,为什么还要通过imageNamed: 函数设置imageView

    如果您传递了正确的UIImage,那么您应该执行以下操作。

    - (void)selectImage:(UIImage *)img
    {
        NSLog(@"%@", img); // This is the UIImage being passed.
        [self.editImageView setImage:img];
        NSLog(@"%@", self.editImageView.image);
    }
    

    据我所知,这就是我们所需要的。如果这是错误的,请更新您的问题,以便我可以相应地回答。

    因 cmets 而编辑

    所以,我从 cmets 中收集到了问题所在。

    您是说在-(void)viewDidLoad 中可以设置图像,这很简单,使用[UIImage imageNamed:] 方法。没关系,但您想以导致问题的单独方法执行此操作。

    为了测试,我建议执行以下操作。

     - (void)viewDidLoad
     {
          [super viewDidLoad];
          // Do any additional setup after loading the view from its nib.
    
          UIImage *imageYouWantToPass = [UIImage imageNamed:@"test.png"];
          [self selectImage:imageYouWantToPass];
    
     }
    

    确保将 selectImage: 方法添加到您的 .h 文件中,这样您就不会收到任何警告。我认为这就是答案,但如果这仍然不能解决您的问题,请提供更多信息。

    【讨论】:

    • 是的,没有效果。但是,如果我将代码 [editImageView setImage:[UIImage imagenamed:@"test.png"]]; 放入 FlipsideViewController 的 - (void)viewDidLoad 方法中,图像 加载。不过,这带来了另一个问题,因为我无法从 FlipsideViewController 的 viewDidLoad 方法访问 MainViewController 的 img 属性。呸!
    • 我最终解决了这个问题,因为每次切换视图时都会调用- (void)wiewDidLoad。您的答案中的代码有效,我所要做的就是让我的 MainViewController 在从 MainViewController 中选择图像时为 FlipsideViewController 设置一个本地的 UIImage 变量(editImage)。当切换视图时,我调用[editImageView setImage:editImage],FlipsideViewController 根据设置的editImage 在viewDidLoad 方法中设置editImageView 的图像。感谢您的坚持!
    【解决方案2】:

    [self.imageView setImage:[UIImage imagenamed:@"test.png"]]

    你不见了..

    在第二种情况下。似乎您已将imageView 连接到.xib 但未连接该属性。请尝试在没有自我的情况下使用它。或者在属性中声明IBOutlet

    【讨论】:

      【解决方案3】:

      检查editImageView是否正确初始化。第一个 NSLog 正常工作意味着你有正确的图像,第二个 NSLog 不工作意味着editImageView 可能有问题。

      【讨论】:

        【解决方案4】:

        当您将UIImage 传递给您的方法(selectImage:)时,无需通过imageNamed: 方法设置imageView (UIImageView)。 因为您在 img 实例中有 UIImage,所以您可以在函数中从 img 设置 image

        如果您传递了正确的UIImage,那么您应该执行以下操作。

        - (void)selectImage:(UIImage *)img
        {   
             NSLog(@"%@", img); // here you have Image in img, so just set Image From this img.
        
             [self.editImageView setImage:img];
             NSLog(@"%@", self.editImageView.image);
        }
        

        我希望它能清除一切......!!!!

        【讨论】:

        • 谢谢,但我的问题不是显示错误的图像,而是显示图像。我没有说清楚,并改变了我的问题以反映这一点。
        • @stevesullivan NP,当您调用该方法时,您需要将Image 传递给该方法(selectImage)作为[self selectImage:[UIImage imageNamed:@"myImage.png"]];
        • 是的,我意识到这一点,并且第一条 NSLog 语句正确打印的事实证实了这一点。我知道 img 被正确传递。问题在于 [self.editImageView setImage:img];似乎没有任何效果,即 NSLog(@"%@", self.editImageView.image);返回(空)。
        • @stevesullivan 正如你所说的img 包含正确的image你必须检查,你是否创建了editImageView(UIImageView) 的对象。我很确定如果一切顺利(根据你的说法),那么错误可能在这个UIImageView。所以请检查这个editImageView
        • 我相信一切都已正确初始化,但问题源于加载视图时无法设置图像。根据 Sebastien Peek 的回答和我的一点创造力,我确实让一切正常工作。感谢您的回复。
        猜你喜欢
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多