cellForRowAtIndexPath 方法未调用
Posted
技术标签:
【中文标题】cellForRowAtIndexPath 方法未调用【英文标题】:cellForRowAtIndexPath method is not invoking 【发布时间】:2017-04-10 05:59:37 【问题描述】:在 UIView 类上添加 UIViewController
有 UITableView
类现在 UIView 类被添加到另一个 UIViewController 类
//MyControllerView
//added filterSideView side to it and adding JaffaViewController.view
-(void)loadControllerJaffa
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
JaffaViewController *jaffaViewController =
[storyboard instantiateViewControllerWithIdentifier:@"JaffaViewController"];
jaffaViewController.view.frame = filterSideView.bounds;
[filterSideView addSubview:jaffaViewController.view];
[jaffaViewController didMoveToParentViewController:self];
#import <UIKit/UIKit.h>
@interface JaffaViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *jaffaTableView;
@end
实现类
@implementation JaffaViewController
- (void)viewDidLoad
[super viewDidLoad];
_colorNameList = [[ColorModelClass colorListNames]allKeys];
_jaffaTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
_jaffaTableView.dataSource = self;
_jaffaTableView.delegate = self;
[_jaffaTableView setBackgroundColor:[UIColor redColor]];
// Do any additional setup after loading the view.
-(void)viewDidAppear:(BOOL)animated
[super viewDidAppear:YES];
_jaffaTableView.dataSource = self;
_jaffaTableView.delegate = self;
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1; //count of section
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return 5;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SimpleTableCell"];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:@"SimpleTableCell"];
cell.textLabel.text = @"Welcome";
return cell;
问题是cellForRowAtIndexPath
方法根本没有被调用。
我已经设置了数据源和委托方法。
它正在调用numberOfRowsInSection
和numberOfSectionsInTableView
两种方法,但不是cellForRowAtIndexPath
方法。
目前我正在使用 Xcode 8.3 和 ios 10.3 版本。
您的善意意见将帮助我解决问题。
【问题讨论】:
如果 numberOfRows 或 Sections 为零。它不会撤销。检查 numberOfRows 确保委托方法设置正确。这是最重要的。我知道你已经做了所有这些事情。但我要求你确定一下。 @SivajeeBattina 我仔细检查了数据源和委托方法。 @Kiran 你设置断点并测试了吗? 这个问题似乎是由于调用了一个编写 tableview 方法的类。您是否尝试在 ViewDidAppear 方法中设置委托和数据源。请尝试一下,如果您成功了,请告诉我。 【参考方案1】:请试试这个代码
-(void)loadControllerView
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
JaffaViewController *jaffaViewController =
[storyboard instantiateViewControllerWithIdentifier:@"JaffaViewController"];
[jaffaViewController willMoveToParentViewController:self];
jaffaViewController.view.frame = filterSideView.bounds;
[filterSideView addSubview:jaffaViewController.view];
[jaffaViewController didMoveToParentViewController:self];
注意事项:
确保您已确认数据源并为其委托。
【讨论】:
【参考方案2】:为什么要设置两次数据源?删除viewDidAppear中的代码,在viewDidLoad末尾添加[_jaffaTableView reloadData];
【讨论】:
【参考方案3】:tingViewController *destVC = [self.storyboard instantiateViewControllerWithIdentifier:@"RatingViewController_id"];
destVC.completionHandler = ^(NSString* string)
NSLog(@"Returned strng.....%@",string);
;
destVC.productId = self.productId;
[destVC.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self addChildViewController:destVC];
[self.view addSubview:destVC.view];
[destVC didMoveToParentViewController:self];
[UIView animateWithDuration:0.3 animations:^
[destVC.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
];
【讨论】:
以上是关于cellForRowAtIndexPath 方法未调用的主要内容,如果未能解决你的问题,请参考以下文章
在 reloadData 后未调用 cellForRowAtIndexPath
解析的提要在 UITableView 上不可见,cellForRowAtIndexPath 方法未被访问
未调用 tableView reloadData cellForRowAtIndexPath
无法在 tableView:cellForRowAtIndexPath: 方法中设置标签框