Загружать текстовый файл при нажатии UITableView - PullRequest
0 голосов
/ 03 февраля 2011

Итак, у меня есть UITableView, показывающий содержимое папки документов приложения.В этой папке у меня есть 9 текстовых файлов с именами 1.txt, 2.txt, 3.txt и так далее.Мне удалось получить выбранную строку, но теперь мне нужно загрузить текст, который соответствует выбранному файлу.Например, если я коснусь 2.txt, в подробном представлении откроется файл 2.txt.Это та часть, которую мне не удается заставить работать.Заранее спасибо:)

Ответы [ 4 ]

1 голос
/ 03 февраля 2011

При выборе строки вызывается метод делегата табличного представления:

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

внутри этого метода вы можете создать имя файла следующим образом:


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

обратите внимание, как я использовал indexPath.row (то есть: номер строки выбранной ячейки) для построения имени файла. Я предполагаю, что в примере первая строка (с индексом 0) приводит к имени файла 1.txt

Теперь вы можете загрузить этот файл.

0 голосов
/ 03 февраля 2011

Хорошо, способ сделать это:

    - (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;

А теперь файлпоявляется: D Большое спасибо!

0 голосов
/ 03 февраля 2011

Таким образом, я смешал два примера и сумел увидеть содержимое текста в 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];
}
0 голосов
/ 03 февраля 2011

В didSelectRowAtIndexPath: метод вы бы сделали что-то вроде:

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];

(вы используете папку документов, если текстовые файлы создаются во время выполнения, и методы NSBundle, если файлы упакованы с приложением)

затем в detailViewController в методе viewDidLoad вы бы поместили что-то вроде:

detailLabel.text = self.detailString;

Где detailLabel - это UILabel или UITextField, в зависимости от того, хотите ли вы, чтобы он был редактируемым или нет и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...