【问题标题】:Can't set UIImageView image无法设置 UIImageView 图像
【发布时间】:2011-12-22 15:29:15
【问题描述】:

我正在使用 if 语句来设置 UIImageView 的图像,具体取决于变量的值。这是声明:

- (void)configureView
{    
    if (self.detailItem) {
        if ([detailItem isEqualToNumber:[NSNumber numberWithInt:0]]) {
            [mapImageView setImage:[UIImage imageNamed:@"0.jpg"]];
            NSLog(@"derp");
        }
    }
}

“derp”被打印,但UIImageView 的图像不会改变...如果我将setImage: 语句放在viewDidLoad 中,它可以正常工作。我做错了什么?

【问题讨论】:

  • 什么时候/在哪里调用你的方法?
  • 在 setDetailItem: - (void)setDetailItem:(NSNumber *)newDetailItem { if (detailItem != newDetailItem) { detailItem = newDetailItem; // 更新视图。 [自我配置视图]; } }
  • 假设“0.jpg”存在于应用程序包中,尝试记录mapImageView.. 要么是nil,要么它的frame 更改为不可见
  • 这段代码是在主线程上运行的吗?如果没有,它可能会导致代码运行时出现相当长的延迟,直到您看到更改。
  • 当我检查 mapImageView 的值时它说它是空的......我应该怎么做才能解决这个问题?谢谢。

标签: objective-c ios cocoa-touch uiimageview uiimage


【解决方案1】:

我猜你是从视图控制器的 init 方法调用 configureView 方法。

此时视图控制器的视图尚未加载,其子视图的出口仍将是nil

从以下任何一个调用它:

awakeFromNib
viewDidLoad
viewWillAppear:
viewDidAppear:

会起作用的。

尝试分配

UIImage * image = [UIImage imageNamed:@"0.jpg"]

在此处设置断点,然后查看image 中的值,以使其正确分配。

【讨论】:

  • 现在 mapImageView 有了值,但它仍然没有改变 ImageView,并且 NSLog 也停止了工作。
  • 老兄,如果您需要更多帮助,您需要开始接受一些答案。
  • "NSImage *image" 顺便说一下,应该是 UIImage *image。
猜你喜欢
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
相关资源
最近更新 更多