2010-11-18 32 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