UITableView 方法没有触发

Posted

技术标签:

【中文标题】UITableView 方法没有触发【英文标题】:UITableView methods not firing 【发布时间】:2013-03-21 13:14:15 【问题描述】:

我有一个带有 UITableView 控件的简单表格视图控制器。我已经在我的头文件中实现了 UITableViewDelegate 和 UITableViewDatasource 。我已将数据源和委托指定为包含 UITableView 的 ViewController。但是,没有一个表视图方法被触发。我已经发布了精简的源代码和显示委托/数据源的屏幕截图。事件未连接的可能原因是什么?

(gauges 是一个包含值对象的 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

【问题讨论】:

你钩对了吗? 委托和数据源函数的挂钩好像有问题 GaugeList 是一个值对象的 NSArray。你继承了 NSArray?你为什么这样做?疼吗? 我正在使用情节提要并已映射 tableview 数据源并委托给 ViewController。我试图发布它的图片,但由于我是新来的,所以不允许。添加图片链接,我会将其添加为图片 您是否在 IB 中为场景指定了正确的视图控制器类? 【参考方案1】:

问题在于您对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]);

【讨论】:

【参考方案2】:

在 viewDidLoad 中

设置

tableView.delegate = self;

如果你不使用XIB,还要分配tableView。或者,如果您使用 xib 将委托和数据源映射到文件所有者

【讨论】:

也设置tableView.dataSource = self; 我正在使用情节提要并已映射 tableview 数据源并委托给 ViewController。我试图张贴那张照片,但由于我是新来的,所以不允许。我是否还需要将 tableview 设置为 outlet? 添加图片链接,我添加为图片【参考方案3】:

将 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

【讨论】:

谢谢,我试过了,但仍然唯一要调用的方法是 viewDidLoad 我还尝试将它放在 loadView 方法中,该方法在 viewDidLoad 之前被调用。但是,结果是一样的。 这不可能不工作。可能你在其他地方有错误。 您是否映射控件拖动表格视图以将其从情节提要中连接到 IBOutlet,我没有为情节提要中的表格视图连接数据源和委托,而是选择执行而是手动进行,如上所示。

以上是关于UITableView 方法没有触发的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 删除行,commitEditingStyle 方法没有触发?

将子视图添加到 UITable

UITable 视图中的单元格队列大小

UITableView 部分标题内的下拉 UIView

UITableView 在 3.2 中工作,但在 4.0(模拟器和设备)中没有触发任何 tableview 方法

在没有自定义单元格的情况下向 uitableview 显示详细信息披露按钮