自定义TableViewController,不显示

时间:2012-11-11 23:41:22

标签: objective-c ios xcode

我在网上搜索了解如何创建自定义表格视图(因为我想隐藏特定视图的导航栏),我正在完成每一步。但是,我的结果不会显示表格。

这是我的.h文件

#import <UIKit/UIKit.h>

@interface HallFameControllerViewController : UIViewController
    <UITableViewDelegate, UITableViewDataSource>{

    NSArray *leaders;
}

@property (strong, nonatomic) NSArray *leaders;

@end

和我的.m文件

#import "HallFameControllerViewController.h"

@interface HallFameControllerViewController ()

@end

@implementation HallFameControllerViewController

@synthesize leaders;

- (void)viewDidLoad
{
    [super viewDidLoad];
    leaders = [NSArray arrayWithObjects:@"Player #1", @"Player #2", @"Player #3", nil];
}

- (void) viewDidUnload{

    self.leaders = nil;
}

- (void) viewWillAppear:(BOOL)animated{

    [self.navigationController setNavigationBarHidden:NO];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 0;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [leaders count];
}

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

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

    // Configure the cell.
    cell.textLabel.text = [self.leaders objectAtIndex: [indexPath row]];
    return cell;
}
@end

在我的故事板中,我创建了一个ViewController,里面有1个标签和1个TableView。我已将ViewController的Custom Class设置为“HallFameControllerViewController”和dataSource,也将Table View的委托设置为“HallFameControllerViewController”。结果,标签在那里,但没有桌子。

我在.m文件中有一些printf()语句,viewDidLoad()已经执行但是cellForRowAtIndexPath()没有!

我在这里做错了什么?另外,什么是cellIdentifier以及为什么设置为“Cell”(自动)?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您需要扩展UITableViewController,而不是UIViewController。然后,您不需要将UITableViewDataSourceUITableViewDelegate协议添加到接口声明中。

您可以使用普通视图控制器,但更多工作。你从来没有在任何地方添加过UITableView。您只需实现表视图方法(您仍需要这样做)。

您需要更新numberOfSectionsInTableView:。即使在解决了其他问题之后,返回0也会给你一张空桌。

所以改变这个:

@interface HallFameControllerViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>{

为:

@interface HallFameControllerViewController : UITableViewController {

并改变这一点:

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

为:

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