原型自定义单元类在推送后不显示对象

时间:2013-10-17 04:10:05

标签: ios objective-c uitableview

有关此问题的解决方案,请参阅此帖子的底部。

单元格确实在初始视图上加载对象,自定义单元格包含UIImage视图和两个UILabel。但是,在选择单元格并按下新批次单元格后,单元格上的对象不会出现。它们只是空白细胞。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"FileCell";
    FileCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];



    if (cell == nil) {
        cell = [[FileCell alloc] initWithReuseIdentifier:CellIdentifier];
    }

    NSString *file = [self.files objectAtIndex:indexPath.row];
    NSString *path = [self pathForFile:file];
    BOOL isdir = [self fileIsDirectory:file];
    [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isdir];
    cell.lblFileName.hidden = false;

    if (isdir == true){
        // directory
        cell.lblFileSize.hidden = true;
        CGRect frame = cell.lblFileName.frame;
        frame.origin.y = cell.frame.size.height / 2 - cell.lblFileName.frame.size.height /2;
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        cell.imgIcon.image = [UIImage imageNamed:@"FBFolderIcon"];
    }else{
        // file
        NSFileManager *man = [NSFileManager defaultManager];
        NSDictionary *attrs = [man attributesOfItemAtPath: path error: NULL];
        float result = [attrs fileSize];
        cell.lblFileSize.text = [self stringFromFileSize:result];
        cell.accessoryType = UITableViewCellAccessoryNone;
        NSString *cellExt = [[file pathExtension] uppercaseString];

        UIImage *tempImage = [UIImage imageNamed:[NSString stringWithFormat:@"FB-%@", cellExt]];

        if (!tempImage) {
            tempImage = [UIImage imageNamed:[NSString stringWithFormat:@"FB-%@", @"UNKNOWNTYPE"]];
        }

        cell.imgIcon.image = tempImage;
    }

    return cell;
}

更新

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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.files count];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *file = [self.files objectAtIndex:indexPath.row];
    NSString *path = [self pathForFile:file];
    if ([self fileIsDirectory:file]) {
        DirectoryBrowserTableViewController *dbtvc = [[DirectoryBrowserTableViewController alloc] init];
        dbtvc.path = path;
        [self.navigationController pushViewController:dbtvc animated:YES];
    } else {
        if(path == nil){
            return;
        }
        else{
            NSURL *URL = [NSURL fileURLWithPath:path];
            if (URL)
            {
                self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:URL];

                self.documentInteractionController.delegate = self;
                [self.documentInteractionController presentOptionsMenuFromRect:CGRectZero                                                           inView:self.tableView animated:YES];
            }}
    }
}

截图:

Initial view, when file browser tab is loaded

After selecting the folder cell

解决方案:

好的,所以问题似乎是我正在分配当前表视图的新实例并将其推送到其中一个单元格上。为了解决标签没有出现在我的第二个视图中的问题,我将原型单元格更改为NIB文件形式的UITableCell。

请记住添加:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.tableView registerNib:[UINib nibWithNibName:@"FileManagerCell" bundle:nil]
         forCellReuseIdentifier:@"FileManagerCell"];
}

在表格视图中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//The name of the cell that we registered in the viewDidLoad method.
    static  NSString *CellIdentifier = @"FileManagerCell";

//FileCell is the name of the class that I have associated with the NIB file.
    FileCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[FileCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

return cell;
}
祝你好运。

1 个答案:

答案 0 :(得分:0)

如果没有看到更多代码,很难回答。例如,DirectoryBrowserTableViewController是如何看起来的?我猜ViewController是你选择文件夹时显示的那个?

在不知道更多关于上下文的情况下我只能猜测,但我会开始查看numberOfRowsInSection的实现(在DirectoryBrowserTableViewController中)。它是否返回目录中的当前文件数?如果它返回零,我猜你最终会得到一个空的tableview。