添加UITableView作为子视图

时间:2013-09-14 20:18:07

标签: ios objective-c cocoa-touch uitableview unrecognized-selector

我正在尝试创建一个只有UITableView作为该视图一部分的视图。我相信这是从代码(而不是界面构建器)创建时的正确模式,但如果我的方法也是错误的,请随意添加建议。

我得到的例外是: [KBSMoreViewController tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例

我有一个类头,如下所示(我在实现中实现了构造函数):

#import <UIKit/UIKit.h>
@interface KBSMoreTableView : UITableView 
- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;
@end

然后我有一个ViewController类头:

@interface KBSMoreViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@end

ViewController,它是标签栏的一部分,工作正常(我试图添加的tableview之外)实现写成:

#import "../Models/KBSMoreTableView.h"

@interface KBSMoreViewController ()
@property (strong, nonatomic) KBSMoreTableView* tableView;
@property (strong, nonatomic) NSString* cellIdentifier;
@property (copy, nonatomic) NSArray *source;

@end

@implementation KBSMoreViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMore tag:0];
        self.source = [[NSArray alloc] initWithObjects:@"Test1", @"Test2", nil];
        self.cellIdentifier = @"MoreCellId";
    }
    return self;
}


- (NSInteger)numberOfRowsInSection:(NSInteger)section
{
    return self.source.count;
}

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentifier];
    if (cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:self.cellIdentifier];
    cell.textLabel.text = self.source[indexPath.row];
    return cell;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView = [[KBSMoreTableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    [self.view addSubview:self.tableView];
}

1 个答案:

答案 0 :(得分:7)

错误很明显。您没有实现tableView:numberOfRowsInSection:表视图数据源方法。相反,您已经创建了一个名为numberOfRowsInSection:的方法。

改变这个:

- (NSInteger)numberOfRowsInSection:(NSInteger)section

为:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section