2011-02-03 7 views
0

したがって、アプリケーションのDocumentsフォルダの内容を表示するUITableViewがあります。そのフォルダには、1.txt、2.txt、3.txtという9つのテキストファイルがあります。選択した行を取得することができましたが、選択したファイルに対応するtxtをロードする必要があります。例を挙げると、2.txtをタッチすると、2.txtファイルの詳細ビューが開きます。それが私が働くことができない部分です。事前に感謝:)UITableViewがタップされたときにテキストファイルをロードする

+0

これまでのところ(コード)は何ですか? – aqua

答えて

0

がわかり、それを行う方法は次のとおりです:ここに は、私はそれを行うために使用しているコードで、私はここで変更

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *fileName = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.txt",indexPath.row+1]]; 
     NSString *fileText = [NSString stringWithContentsOfFile:fileName]; //< this line actually reads the text in the file at the path provided 
     DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
     detailViewController.strName = fileText; 

     [self.navigationController pushViewController:detailViewController animated:YES]; 


     [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    [detailViewController release]; 
} 

お知らせ:

detailViewController.labelName = fileText; 

へ:

detailViewController.strName = fileText; 

そして今、f ileが表示されます:D ありがとう!

1

あなたがテーブルビューのデリゲートメソッドが呼び出された行を選択した場合:このメソッドの内部

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

あなたがこの方法でファイル名を構築することができます。


NSString *fileName = [DocumentsFolder stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.txt",indexPath.row+1]]; 

予告どのように私はindexPath.row(つまり、選択されたセルの行番号)を使用してファイル名を構築しました。最初の行(0で索引付けされている)がファイル名1.txtにつながっているとします。

このファイルをロードできます。 didSelectRowAtIndexPathで

0

:ファイルが一緒にパッケージされている場合(テキストファイルは実行時に作成されている場合はドキュメントフォルダを使用し、NSBundleの方法だろう

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"txt"]; //< or getting the file from the documents folder 
NSString *fileText = [NSString stringWithContentsOfFile:path]; //< this line actually reads the text in the file at the path provided 
detailViewController.detailString = fileText; 
[self.navigationController pushViewController:detailViewController animated:YES]; 

:あなたのような何かをしたい方法

detailLabelはUILabelまたはUITextFiある
detailLabel.text = self.detailString; 

:アプリ)

はその後detailViewControllerでviewDidLoadメソッドでは、あなたのようなものを入れたいですあなたがそれを編集可能にするかどうかによって異なります。

+0

私は2つの例を混ぜ合わせて、NSLogのテキストの内容を見ることができましたが、DetailViewControllerではできませんでした。 – pmerino

+0

申し訳ありませんサンプルで間違いました。あなたのdetailViewControllerがサブクラスであると思いますか? Interface Builder(またはコード)を使用してUILabelを追加し、それをIBOutletにリンクする必要があります。また、retainプロパティ(detailString)を追加する必要があります。 –

0

私は2つの例を混ぜ合わせて、NSLogのテキストの内容を見ることができましたが、DetailViewControllerでは表示しません。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fileName = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.txt",indexPath.row+1]]; 
    NSString *fileText = [NSString stringWithContentsOfFile:fileName]; //< this line actually reads the text in the file at the path provided 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
    detailViewController.labelName.text = NSString = [stringWithContentsOfFile:fileName]; 

    [self.navigationController pushViewController:detailViewController animated:YES]; 

    NSLog(@"didSelectRowAtIndexPath: row=%d", indexPath.row); 
    NSLog(fileText); 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    [detailViewController release]; 
} 
関連する問題