cellForRowAtIndexPath未被调用

时间:2011-12-02 06:21:28

标签: objective-c xcode uitableview

我有一个视图,以这种方式在顶部添加另一个视图:

- (void)showAreaEditView {

    NSLog(@"SHOWING AREA EDITOR VIEW");

    if (self.thisAreaEditorView == nil) {

        // Create View
        AreaEditorView *tmpViewController = [[AreaEditorView alloc] initWithNibName:@"AreaEditorView" bundle:nil];
        self.thisAreaEditorView = tmpViewController;
        [tmpViewController release];

        // Hide the back button
        self.thisAreaEditorView.navigationItem.hidesBackButton = YES;

    }

    self.thisAreaEditorView.myInspectionID = self.myInspectionID;
    self.thisAreaEditorView.loggedIn = loggedIn;
    self.thisAreaEditorView.loggedInGroup = loggedInGroup;

    // Slide view up

    [self.view addSubview:thisAreaEditorView.view];


    CGRect endFrame = CGRectMake(self.view.frame.size.width/2 - thisAreaEditorView.view.frame.size.width/2,
                                 self.view.frame.size.height/2 - thisAreaEditorView.view.frame.size.height/2, 
                                 thisAreaEditorView.view.frame.size.width, 
                                 thisAreaEditorView.view.frame.size.height);

    CGRect startFrame = endFrame; // offscreen source

    // new view starts off bottom of screen
    startFrame.origin.y += self.view.frame.size.height;
    self.thisAreaEditorView.view.frame = startFrame;

    // start the slide up animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.6];   
    thisAreaEditorView.view.frame = endFrame; // slide in
    [UIView commitAnimations];

}

我确信你可以忽略幻灯片部分,我觉得addSubview是相关的。

然后在thisAreaEditor中我有了表和按钮之类的视图。 UITableView委托/数据源正常进入文件所有者。

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

    NSLog(@"numberOfRowsInSection returning %d", [tableData count]);
    [tableData count];

}

此函数numberOfRowsInSection返回4

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

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

    // Configure the cell...
    NSString *thisText =  [tableData objectAtIndex:indexPath.row];
    cell.textLabel.text = thisText;

    NSLog(@"looking at cell %d text:%@", indexPath.row, thisText);

    return cell;

}

但是不会调用cellForRowAtIndexPath。

我在这里不知所措,我不知道它看起来如何工作正常,但其中一个委托函数根本就没有被调用。

我已经尝试了[bigTable reloadData]等等,这个表永远不会被填充,也没有来自函数输出的日志。

提前致谢。

5 个答案:

答案 0 :(得分:8)

你可能刚刚编辑了这个,如果有的话我很抱歉,但看起来你忘记了返回tableData的数量。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"numberOfRowsInSection returning %d", [tableData count]);
    return [tableData count];
}

答案 1 :(得分:3)

你好像缺少UITableViewDelegate。

如果您正在使用Interface Builder,请右键单击表格视图插座,然后将delegatedatasource拖至File's Owner

如果不使用Interface Builder,请在初始化tableView

的位置添加
bigTable.delegate = self;
bigTable.dataSource = self;

请记住导入UITableViewDelegate和UITableViewDataSource协议,就像Srikar所说的那样。

希望这对任何帮助。

干杯!

答案 2 :(得分:1)

未设置tableview的高度时,也不会调用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

答案 3 :(得分:0)

也许您没有将tableView委托设置为self或将数据源设置为self。添加此代码&看看它现在是否有效 -

[tableView setDelegate:self];
[tableView setDataSource:self];

同样在您的头文件中继承这些代理 - UITableViewDelegate, UITableViewDataSource

@interface yourViewController: UIViewController <UITableViewDelegate, UITableViewDataSource>

希望这有帮助。

答案 4 :(得分:0)

这是一个较旧的链接,但我想通过提供有关我如何解决此问题的信息来更新此链接。 对我来说问题是填充表的数组有0行,因此从未调用过cellForRowAtIndexPath。 确保用于填充表的数组中包含数据。