我有一个带有UITableView控件的简单表视图控制器。我在头文件中实现了UITableViewDelegate和UITableViewDatasource。我已将数据源和委托分配为包含UITableView的ViewController。但是,没有任何表视图方法正在触发。我发布了精简的源代码和显示委托/数据源的屏幕截图。可能导致事件没有接通的可能原因是什么?
(仪表是包含值对象的NSArray的模型)
标题
#import <UIKit/UIKit.h>
#import "GaugeList.h"
@interface SitePickerViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic,strong) GaugeList *gauges;
@end
实施
#import "SitePickerViewController.h"
@interface SitePickerViewController ()
@end
@implementation SitePickerViewController
@synthesize gauges;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSInteger rowCount = [gauges.gaugeList count];
NSLog(@"numberOfRowsInSection called: %i\n", rowCount);
return rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"cellForRowAtIndexPath\n");
UITableViewCell *cell = [[UITableViewCell alloc] init];
return cell;
}
-(void)loadView{
gauges = [[GaugeList alloc] initWithStateIdentifier:@"WV" andType:nil];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"viewDidLoad called: %i\n", [gauges.gaugeList count]);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
答案 0 :(得分:0)
在viewDidLoad
中设置
tableView.delegate = self;
如果您不使用XIB,还可以分配tableView。或者,如果您使用xib将代理和数据源映射到文件所有者
答案 1 :(得分:0)
使SitePickerViewController成为委托和数据源还不够。您还必须将该类设置为数据源和委托。确保也要连接到IBOutlet。
@interface <UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *functionTableView;
@end
@implementation
- (void)viewDidLoad
{
[super viewDidLoad];
self.functionTableView.delegate = self;
self.functionTableView.dataSource = self;
}
//Delegate and datasource methods down here
@end
答案 2 :(得分:0)
问题在于您loadView
的实施。 loadView
的任何实现都必须实际为控制器创建主视图并将其分配给self.view
。如您所知,最终没有为视图控制器创建视图。
将您拥有的方法调用移至viewDidLoad
。
- (void)viewDidLoad {
[super viewDidLoad];
gauges = [[GaugeList alloc] initWithStateIdentifier:@"WV" andType:nil];
// Do any additional setup after loading the view.
NSLog(@"viewDidLoad called: %i\n", [gauges.gaugeList count]);
}