在自定义 UIview 中设置 UItableview 的委托和数据源

Posted

技术标签:

【中文标题】在自定义 UIview 中设置 UItableview 的委托和数据源【英文标题】:set delegate and data source of UItableview in custom UIview 【发布时间】:2014-09-01 04:46:39 【问题描述】:

我有一个自定义的UIView,它有几个不同的视图,还有一个UITableview

我创建了一个自定义类,它是UITableViewController 的子类。这将控制UITableviewUITableView 的原型单元。

如果我将 delegatedatasource 设置为父视图,我会收到以下错误:

-[RoadSafetyAppViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x10c92f190

其中 RoadSafetyAppView Controller 是父视图。但是,如果我根本不设置委托和数据源,我的表不会加载我在自定义类中声明的图像,如下所示:

@implementation MenuController
@synthesize menuArray;

-(void) viewDidLoad

    [super viewDidLoad];


    self.menuArray = [NSMutableArray arrayWithCapacity:4];
    [menuArray addObject:[UIImage imageNamed:@"Dob in a Hoon menu.png"]];
    [menuArray addObject:[UIImage imageNamed:@"Report a Hazard menu.png"]];
    [menuArray addObject:[UIImage imageNamed:@"Old Logo menu.png"]];
    [menuArray addObject:[UIImage imageNamed:@"Council Website menu.png"]];



-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView

    return 1;



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

    return [self.menuArray count];


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

    static NSString *CellIdentifier = @"CellIdentifier";
    MenuCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    cell.menuImage.image =[UIImage imageNamed:@"Dob in a Hoon menu.png"];

    switch (indexPath.row) 
        case 0:
            cell.menuImage.image =[UIImage imageNamed:@"Dob in a Hoon menu.png"];
            break;
        case 1:
            cell.menuImage.image =[UIImage imageNamed:@"Report a Hazard menu.png"];
            break;
        case 2:
            cell.menuImage.image =[UIImage imageNamed:@"Old Logo menu.png"];
            break;
        case 3:
            cell.menuImage.image =[UIImage imageNamed:@"Council Website menu.png"];
            break;
        default:
            break;
    


    return cell;

有人可以指出我的图像哪里出了问题,或者我需要将我的委托/数据源设置为什么吗?

谢谢。

【问题讨论】:

看起来您应该将 delegatedataSource 设置为您的 MenuController 实例,而不是 RoadSafetyAppViewController RoadSafetyAppViewControllerMenuController 的父级吗?将delegatedatasource 设置为MenuController 并检查。 menuArray 初始化了吗? 【参考方案1】:

At your MenuController.h

MenuController : UIViewController<UITableViewDelegate,UITableViewDataSource>

并在 Interface Builder 中将 UITableView 与 Delegate&Datasource 连接起来..

希望它能解决您的问题..!

【讨论】:

我无法控制+从 tableview 拖动到 Delegate 或 Datasource。 您需要像上面一样声明 Delegates 以使其从 tableview 控制+拖动到 Delegate & Datasource...! 我已经按照您的建议修改了我的 .h 文件,但仍然无法从我的表格视图数据源拖动到表格视图。 您是否在 Interface Builder 中将文件所有者设置为 MenuViewController..PLZ 检查..这可能是问题..! 我愿意,但加班我离开身份检查员,自定义类变回 UITableview。【参考方案2】:

在MenuController的viewDidLoad方法中编码设置delegate和datasouce

_tblView.delegate = self;
_tblView.dataSource = self;

【讨论】:

由于某种原因,我不能这样做,我无法将我的 IBoutlet 链接到 tableview。控制+拖动不允许我在我的 .hfile 中选择 iboutliet

以上是关于在自定义 UIview 中设置 UItableview 的委托和数据源的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 UIView 中从 ViewController 传递数据

在自定义对话框中设置文本视图

在自定义 HttpClientHandler 中设置 allowautoredirect=false

使用依赖属性在自定义类中设置属性

如何在自定义 HttpMessageHandler 中设置属性?

在自定义 UITableViewCell 中设置 UIButton 的 contentMode 没有效果