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 控制器的主要内容,如果未能解决你的问题,请参考以下文章
在 splitViewController 的 detailView 中设置 barButtonItem 的标题