iPhone - detailView 控制器

Posted

技术标签:

【中文标题】iPhone - detailView 控制器【英文标题】:iPhone - detailView controller 【发布时间】:2010-11-18 13:22:02 【问题描述】:

我有一个 tableView,其中列出了内容目录,其中包括 jpg、pdf、zip、mp3、mp4、sql、.. 文件甚至文件夹。在下一步中,我有一个 detailView,它显示所选文件的一些属性,例如 fileName、fileSize、filePath、fileType。一切都很完美。

但实际上我的计划是在 detailView 中包含一个附加选项。

也就是说,

    如果 tableView 中选择的文件是图像文件,它应该在 detailView 中打开一个 imageView 以显示该图像。 如果所选文件是 mp3,则应在 detailView 中打开播放器播放歌曲。 如果所选文件是视频或 mp4 文件,则应打开播放器以详细播放该视频。 如果选中的项目是一个文件夹,它应该再次打开一个 tableView 来显示文件夹的内容。 对于其他文件,它应该推送一个关于它是未知文件的 alertView。

希望我的概念能被很好地讲述。我得到了播放 .mp3 和 .mp4 文件的方法。现在我被困在推送 imageView 和文件夹的情况下。我不知道要同时采用这两种方法。

这是我的表格视图

这是我的视频文件的详细视图

这是我的 .mp3 文件的详细视图

这是为我的 imageView 留空的 detailView。

请帮助我处理一些示例代码。提前谢谢你。

【问题讨论】:

对不起。我无法上传最后几个步骤的屏幕截图。 【参考方案1】:

根据您的屏幕截图和实现其他文件类型的进度,我假设您能够将文件路径的信息传递给详细视图。所以,对于图像文件,我将讨论如何将其显示为UIImageView

对于图像视图,您需要创建一个带有路径的UIImage

下面的代码示例:假设pathString 是带有图像路径的NSString*,而imageView 现在是应该显示图像的UIImageView。此代码将驻留在处理图像显示的detailViewController-viewDidLoad 方法中。

UIImage* theImage = [[UIImage alloc] initWithContentOfFile:pathString];
imageView.image = theImage;
[theImage release];

至于文件夹视图,这有点不同。为获得最佳结果,您需要递归加载您现在用来显示文件列表的tableViewController(这样它将递归地继承所有文件/文件夹处理)。

我建议在实际推送视图之前将folderPath 之类的实例变量添加到您设置的tableViewController 中。 tableViewController 应该使用它作为基本路径。

下面的代码示例:假设pathString 是带有目标路径的NSString*,并且detailViewController 现在是要打开的新tableViewController 的一个实例。此代码将驻留在将创建要显示的新 detailViewController 的方法中,位于 tableView:didSelectRowAtIndexPath: 内的某个位置

detailViewController.folderPath = pathString;
[self.navigationController pushViewController:detailViewController animated:YES];

然后您应该在tableViewController-viewDidLoad 方法中实现应该从folderPath 实例变量中读取哪些文件夹内容。

【讨论】:

谢谢。 imageView 的方法有效。但我被困在文件夹部分。我不知道如何递归地为 tableView 推送 tableView。你能帮我提供源代码或任何教程吗? 我的意思是递归的意思是,用于查看文件的 TableViewController 将加载其自身的另一个实例以显示子文件夹的内容。您的 TableViewController 应该有一个属性来定义它正在显示的路径,以便每个子文件夹项将其完整路径传递给新的 TableViewController 以进行加载。如果您需要进一步的解释/代码,请告诉我。【参考方案2】:

这个方法- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; 在某个单元格上发生触摸时调用。

您可以通过 [yourTableView cellForRowAtIndexPath:cellIndex];

获取单元格

之后您可以看到类型属性,并打开相应的视图控制器。 [self.navigationController pushViewController:detailViewController animated:YES];

【讨论】:

嗯。我不知道如何在 detailView 中使用 imageView 并使用它来显示所选图像。我可以得到任何有关这方面的指导吗? UIImage *img = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"theimagefile" ofType:@"png"]]; imgView = [[UIImageView alloc] initWithImage:img];【参考方案3】:

当你创建你的 detailView 时,你应该用额外的参数来重载 init,这些参数指示要显示的媒体类型和这个资源的 url/文件。

如果是图片,look at this post

【讨论】:

以上是关于iPhone - detailView 控制器的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 详细播放电影查看

iPhone - 使用子文件夹

在 splitViewController 的 detailView 中设置 barButtonItem 的标题

UITableViewController detailView 从不推送

DetailView 中的编辑模式

主/详细故事板项目中的 IOS 导航栏在 ipad 上是透明的,但在 iphone 上不透明