实现UITableView及其控制器

时间:2012-07-18 10:28:53

标签: xcode controller uitableview

我正在尝试以编程方式实现UITableView。

我有一个UIView(名为IndexView)。这是构造函数:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) 
    {
        MyTableViewController* favorite_table_view_controller = [[MyTableViewController alloc] init];
        UITableView* theTableView = [[UITableView alloc] initWithFrame:CGRectMake(20, 65, 280, 350) style:UITableViewStylePlain];
        theTableView.delegate = favorite_table_view_controller;
        theTableView.dataSource = favorite_table_view_controller;
        [self addSubview:theTableView];
    }
    return self;
}

MyTableViewController以这种方式定义:

@interface MyTableViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

并实现两个必要的功能:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return data.count;
}

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

    if (cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Cell"];

    [cell.textLabel setText:[data objectAtIndex:indexPath.row]];

    return cell;
}

我收到了这个错误:

[__NSMallocBlock__ tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x6897de0
2012-07-18 12:07:24.607 ButtonsTest[22854:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSMallocBlock__ tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x6897de0'

我认为将控制器绑定到视图时会出现问题。但我无法找到。

知道这个问题来自哪里?

1 个答案:

答案 0 :(得分:0)

您不应该从视图构造viewcontroller。它应该以相反的方式完成。(从UIVIewControllers构造视图)

创建一个ViewController,使其成为UIViewController的子类,然后让它实现UITableViewDelegateUITableViewDataSource。如果您仍然需要从另一个控制器类控制UITableView,请在父UIViewController中设置此连接,而不是从View本身设置。这是iOS中密集使用的MVC的基本前提