Objective-C:如何在UiTableView中为每个文件名添加一个新单元格?

时间:2013-07-01 15:26:16

标签: objective-c uitableview

Bellow我有一些代码列出了保存视频文件的文档目录的路径。然后代码在单元格中列出,但它是完整路径,只使用一个单元格。所以我想要做的是首先减少路径,只列出文档控制器中文件的文件名,然后为每个文件分配一个单独的单元格。这可能吗?

以下是我用来列出文档目录路径的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil];


}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(!filePathsArray)  // if data loading has been completed, return the number of rows ELSE return 1
    {

        if ([filePathsArray count] > 0)
            return [filePathsArray count];
        else
            return 1;
    }

    return 1;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MainCell"];
    }
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil];
    cell.textLabel.text = [documentsDirectory stringByAppendingPathComponent:[filePathsArray objectAtIndex:indexPath.row]];
    return cell;
}

提前致谢。

2 个答案:

答案 0 :(得分:0)

就像现在一样,每次调用方法viewDidLoad时,您都会在tableView:cellForRowAtIndexPath: 中加载文件路径,这是低效且不必要的。

无论如何,你只需要:

cell.textLabel.text = [filePathsArray[indexPath.row] lastPathComponent];

如果我正确理解您的要求。

答案 1 :(得分:0)

使用此:

NSFileManager *fm [NSFileManager defaultManager];
NSArray *documentsDirectoryContents = [[fm contentsOfDirectoryAtPath:documentDirectory error:nil] mutableCopy];

它适用于我,只返回文档目录(不是完整路径)中文件的文件名。 然后使用该数组作为表的数据源。 因此,请将每个单元格的文本设置为相应的文件名。

此外,正如NSBum所说,只有当您希望刷新文档目录的内容时才能获取文件名 - 换句话说,只有当您想要更新表时才能获得文件名。