iOS拆分视图控制器-在detailViewController中更改图像

Posted

技术标签:

【中文标题】iOS拆分视图控制器-在detailViewController中更改图像【英文标题】:iOS Split view controller - changing image in detailViewController 【发布时间】:2012-05-04 18:14:22 【问题描述】:

这是另一个“我确信有一个简单的答案”的问题,但我发现自己很困惑。

我正在使用模板中的拆分视图控制器。我成功地将 NSString 传递给 _detailItem 变量,但无法使用它来创建图像并将其加载到 UIImageView(名为“stripImage”)中。

它一直有效到: [self.stripImage setImage:[UIImage imageNamed:_detailItem]];

如果我将字符串文字放入同一行代码(如@"image20.jpg"),它可以正常工作。

- (void)configureView

// Update the user interface for the detail item.

if (self.detailItem) 
    NSLog(@"_detailItem is still: %@",_detailItem);
  // correctly reports the name of the imagefile (for example: "image20.jpg"

    [self.stripImage setImage:[UIImage imageNamed: _detailItem]];

    NSLog(@"The image being shown is: %@",self.stripImage.image);
      //returns "The image being shown is: (null)"


请帮助防止我的脑袋爆炸。提前致谢。

...我已经尝试过这种方式:

(在我的主视图控制器中):

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

NSLog(@"Selected row %i",[indexPath row]);
NSString *imageName = [[stories objectAtIndex:[indexPath row]] objectForKey:@"link"];

NSLog(@"The image is: %@", imageName);

// These two work, oddly enough...

self.detailViewController.detailTitle.text = [[stories objectAtIndex:[indexPath row]]      
                 objectForKey:@"title"];
self.detailViewController.detailSubtitle.text = [[stories objectAtIndex:[indexPath row]] 
                 objectForKey:@"subtitle"];
// this one, not so much...
[self.detailViewController loadUpImageWith:imageName];
 

在我的细节视图控制器中:

- (void)loadUpImageWith:(NSString *)what

NSString *path = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString 
                 stringWithFormat:@"strips/%@", what]];
NSLog(@"The file's url is: %@",path);

UIImage *img = [UIImage imageWithContentsOfFile:path];
NSLog(@"The resultant image is: %@",img);

stripImage.image = img;

但奇怪的是……如果我用字符串文字替换变量(在这种情况下为“what”):

NSString *path = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString 
                 stringWithFormat:@"strips/%@", @"grumbles300.jpg"]];

...它起作用了,显示那个一个图像。但我希望能够在那里使用变量!!

帮助我欧比万克诺比!你是我唯一的希望。

【问题讨论】:

您在使用 ARC(自动引用计数)吗? 【参考方案1】:

令人尴尬的操作员错误。

我正在将一堆图像添加到捆绑包中,但它显然会跟踪包含它们的文件夹需要将其添加到文件名中。我认为 UIImage imageNamed: 会追踪图像,只要它们包含在主包中。显然不是。

也许这对正在经历同样类型的大脑放屁的人有用。

解决这个问题后,很容易做到这一点:

- (void)loadupDetailTitle:(NSString *)title 
                 subtitle:(NSString *)subtitle 
                    image:(NSString *)imageName

NSString *path = [@"strips/" stringByAppendingPathComponent:imageName];
stripImage.image = [UIImage imageNamed:path];
detailTitle.text = title;
detailSubtitle.text = subtitle;

【讨论】:

以上是关于iOS拆分视图控制器-在detailViewController中更改图像的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 拆分视图控制器上推送新的视图控制器

拆分视图控制器偶尔会在 iOS 13 上的 iPhone 上显示详细视图

动态设置拆分视图控制器为根视图控制器IOS

iOS拆分视图控制器-在detailViewController中更改图像

ios 如何从单视图 Segue 到拆分视图控制器

在拆分视图控制器 iOS8 目标 C 中从右侧打开主视图