2010-11-18 158 views
0

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

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

即,

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

希望我的概念能够很好地被叙述。我得到了播放.mp3和.mp4文件的方法。现在我卡在推送imageView和文件夹的情况下。我没有任何想法来进行这两种方法。

这是我的tableView alt text

这是我的视频文件的DetailView alt text

这是我的一个.MP3文件 alt text

这是的DetailView空了的DetailView我ImageView的。 alt text

请帮我做一些示例代码。先谢谢你。

+0

对不起。我无法在最后几个步骤中上传截图。 – iOS 2010-11-18 14:08:09

回答

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例如读取变量。

+0

谢谢。 imageView的工作方式。但我卡在文件夹部分。我不知道如何递归推送tableView的tableView。你能帮我一个源代码或任何教程吗? – iOS 2010-11-19 07:16:23

+0

任何想法查看子文件夹? – iOS 2010-11-19 11:44:17

+0

我的意思是递归的是,您用来查看文件的TableViewController将加载其自身的另一个实例以显示子文件夹的内容。你的TableViewController应该有一个属性来定义它正在显示的路径,这样每个子文件夹项都会传递它的完整路径到新的TableViewController来加载。 让我知道你是否需要一些进一步的解释/代码。 – 2010-11-21 23:45:01

0

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

你可以得到细胞与[yourTableView cellForRowAtIndexPath:cellIndex];

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

+0

呵呵。我没有任何想法如何在detailView中使用imageView并使用它来显示选定的图像。我能得到有关这方面的任何指导吗? – iOS 2010-11-18 14:00:16

+0

UIImage * img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@“theimagefile”ofType:@“png”]]; \t imgView = [[UIImageView alloc] initWithImage:img]; – marko 2010-11-18 14:29:36

0

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

如果它是一个图像,look at this post