iOS不限級文件列表

    源碼下載:http://www.oschina.net/code/snippet_616092_14113    sql

    前段時間用UITableView作了一個獲取document下的樹形文件列表,不一樣於網上其餘用plist或sqllite預約義好文件level,該程序根據文件夾層次,自動分級別。該文件列表的實現思路,以及代碼以下。數組

    一、首先,建立工程,並添加rootViewController,在rootViewController中添加UITableView控件,設置其dataSource及delegate爲self或者任何其餘類。
spa

    二、UITableViewCell是根據路徑肯定顯示的labelText.text的內容的,因此,咱們須要獲取每一個UITableViewCell對應的路徑,另外,返回上級目錄的時候,也是根據路徑及級別reload,tableView的。因此,咱們先建立一個包含level,和pathName兩個字段的數據模型CellModel.net

    三、肯定數據模型後,根據給定的初始path設置cellModel對象,並把該對象存到全局的NSMutableArray裏。code

   self.modelArray = [[NSMutableArray alloc] init];component

    CellModel * cellmode = [[CellModel alloc] init];對象

    cellmode.pathName = FILELIST_DIR;//FILELIST_DIR是個宏定義,定義了初始路徑。ip

    cellmode.level = 0;rem

    [self.modelArray addObject:cellmode];源碼

    [cellmode release];

    四、獲取某個路徑下的文件及文件夾:

        NSArray * tempArray = (NSArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];

    判斷這個文件是不是文件夾;

     BOOL isDir = NO;

    [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir];

    五、關於列表的加載和刷新,返回,其實就是更換全局可變數組modelArray裏面的數據。而modelArray的數據是根據你每次點擊的UITabelViewCell肯定的。最關鍵的代碼在UITableView的delegate方法- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath,該方法主要做用是根據點擊的cell對應的cellModel對象reload對應的數據。該方法代碼以下:

static int levels = 0;//文件的級別。

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

{

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    CellModel * cellmodel = (CellModel *)[modelArray objectAtIndex:indexPath.row];//得到當前文件目錄路徑

    levels = cellmodel.level;//獲得文件級別

    path = cellmodel.pathName; 

    NSError * error = [[NSError alloc] init];

    NSArray * tempArray = (NSArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];//獲得該目錄的子目錄

    NSArray * array = [NSArray arrayWithArray:self.modelArray];

    for (CellModel * model in array) 

    {

        if(model.level > levels)

        {

            [self.modelArray removeObject:model];//根據目錄級別,刪除大於該級別的文件

        }

    }

    BOOL isDir = NO;

    [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir];

    if(isDir)//判斷點擊的是否爲文件夾

    {

    int count = indexPath.row + 1;

    NSMutableArray * files = [NSMutableArray arrayWithArray:tempArray];

    for(NSString * fileName in tempArray)

    {

        if([fileName rangeOfString:@"."].length != NSNotFound)//判斷獲取的文件是不是以.開頭的,是的話就刪掉

        {

            NSArray * array = [fileName componentsSeparatedByString:@"."];

            if(([array count] == 2)&&[[array objectAtIndex:0] isEqualToString:@""])

            {

                [files removeObject:fileName]; 

            }

        } 

    }

    for(NSString * fileName in files)

    {

        NSString * pathName = [path stringByAppendingPathComponent:fileName];

        CellModel * model = [[CellModel alloc] init];

        model.pathName = pathName;

        model.level = indexPath.row + 1;//在此設置子文件的級別

        [self.modelArray insertObject:model atIndex:count++];//把子文件對象插入到數組中

        [model release];

    }

        NSArray * mement = [NSArray arrayWithArray:self.modelArray];

        for(CellModel * model in mement)

        {

            if((model.level == levels) && (![model.pathName isEqualToString:path]))

            {

                [self.modelArray removeObject:model];//刪掉同級目錄

            }

        }

        [tableView reloadData];

    }

}

相關文章
相關標籤/搜索