当前位置 : 主页 > 手机开发 > ios >

ios – UITableViewController不会调用cellForRowAtIndexPath但是numberOfSectionsInTableView和num

来源:互联网 收集:自由互联 发布时间:2021-06-11
解: 解决方案是从UITableView正确启动,然后将UITableView委托添加到UIViewController,如所选答案中所述. 前言:我几乎阅读了有关此事的所有文章,没有任何建议有帮助. 我正在将UITableViewContro
解:

解决方案是从UITableView正确启动,然后将UITableView委托添加到UIViewController,如所选答案中所述.

前言:我几乎阅读了有关此事的所有文章,没有任何建议有帮助.

我正在将UITableViewController的UITableView嵌入到UIViewController中.

我知道除非渲染视图,否则不会调用任何东西,因此我渲染它并且我可以使用NSLog来显示它击中了那些方法.

我尝试在InterfaceBuilder中创建一个UITableViewController并将我的子类设置为自定义类,这样就可以了!但这不是我需要去做的事情.这是我收集/完成的内容:

>我使用InterfaceBuilder来管理UIViewController但我正在以编程方式添加UITableView
> delegate和dataSource都设置正确,self.tableView不是nil
>尽管有效的日志记录,但从不调用cellForRowAtIndexPath,并且渲染的UITableView为空
>我将代表添加到我的控制器,它没有改变任何东西

我在UITableViewController上设置了以下内容:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSLog(@"%@", self.questions); // This outputs the questions array as not empty and works
    // As you can see I am also returning 1.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"%d", [self.questions count]); // This outputs 4 as it should
    return [self.questions count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // All we need to focus on is this NSLog which never outputs
    NSLog(@"Was called and array is, %@" self.questions);

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    return cell;
}

我尝试过多种方式设置视图:直接添加UITableViewController,添加UITableViewController的UITableView(这似乎是正确的方法),但没有任何工作.

也许在使用InterfaceBuilder或我忘记的一些随机事物时,我已经忘记了一个重要的步骤.任何帮助,将不胜感激.谢谢!

**更新**
这是我添加UiTableViewController或UITavleView的方法

GTTableViewController *tvc = [[GTTableViewController alloc] initWithStyle:UITableViewStylePlain];
// Either
[self.view addSubview:tvc.view];
// OR
[self.view addSubview:tvc.tableView];
// Just to make sure everything is still ok.. and I see the 2/3 TV methods fire.
[self.tableView reloadData];
我将向您展示如何以编程方式将表视图添加到不是UITableViewController的视图控制器的简单示例,而不是尝试分析您的代码.希望这可以帮助您自己解决问题.

在.h文件中:

@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
}
@end

在.m文件中:

- (void) loadView
{
  CGRect mainViewFrame = CGRectMake(...);
  self.view = [[[UIView alloc] initWithFrame:mainViewFrame] autorelease];

  // You could make this even simpler if you set the table view as
  // your main view
  CGRect tableViewFrame = self.view.bounds;
  UITableView* tableView = [[[UITableView alloc] initWithFrame:tableViewFrame style:UITableViewStylePlain] autorelease];
  [self.view addSubview:tableView];

  tableView.delegate = self;
  tableView.dataSource = self;
}

这就是它.没什么了不起的,但是通过这个简单的设置,UITableViewDataSource数据源方法应该很乐意触发,包括tableView:cellForRowAtIndexPath:.至少他们在这里做…

我建议你采用这个例子,让它在你的环境中运行.然后,您逐步将其逐步修改为您想要的设计.在某些时候,事情将停止工作,然后你将有问题的根源.

网友评论