Отображение NSArray файлов в UITableView – iOS 5
У меня есть приложение, которое позволяет пользователям сохранять и открывать текстовые файлы. Сохранение и открытие файлов довольно просто и легко, но я должен дать пользователю простой способ выбрать файл для открытия. Я решил сделать это с помощью UITableView .
Когда TableView загружается в контроллер моего представления, моя цель состоит в том, чтобы заполнить TableView именами всех текстовых файлов пользователя из папки «Документы» (часть изолированной панели приложений iOS).
У меня есть общее представление о том, как это сделать:
-
Получите содержимое папки «Документы» и поместите его в массив
NSString *pathString = [[NSBundle mainBundle] pathForResource:@"Documents" ofType:@"txt"]; NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:pathString error:nil]; NSLog(@"Contents of directory: %@", fileList);
Но это всегда возвращает:
(null)
в окне вывода. Каков путь к папке документа моего приложения? -
Поместите массив в UITableView
Я решил использовать метод
numberOfRowsInSection
для этого. Является ли это подходящим местом для выполнения этого типа операции? Должен ли я использовать другой метод? -
Наконец, приложение получит значение выбранной ячейки и использует это значение для открытия файла.
Мой главный вопрос: как я могу разместить элементы (особенно содержимое каталога) в NSArray, а затем отобразить этот массив в UITableView?
Любая помощь высоко ценится!
Вы можете получить путь, используя:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0];
Вы можете получить содержимое каталога, используя:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil];
Что касается отображения NSArray в UITableView, вы должны просмотреть документацию Apple по протоколу UITableView Data Source:
Вы используете метод cellForRowAtIndexPath для фактического заполнения таблицы, что-то вроде этого будет работать:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIdentifier"] autorelease]; } cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.textLabel.text = [fileList objectAtIndex:indexPath.row] return cell; }