这是我第一次使用Storyboard构建应用程序。我正在尝试使用自定义单元格创建UITableView。我在IB中创建了单元格并为其创建了一个自定义的tableViewCell类(添加了一些标签,创建了适当的出口,在IB中连接它们并将自定义类分配给IB中的自定义单元格)。
在负责TableView的ViewController中,我创建数据源(带有一些数组的dict)并填写所有必需的方法(我已经尝试了UITableViewControler和UIViewController,它被设置为委托和数据源对于tableview)
当我运行应用程序时 - tableview是空的。在做了一些NSLogging后,我注意到数据源方法永远不会被执行。我没有想法为什么。
我现在已经疯了几个小时了。请帮帮我:))
如果您需要查看代码或故事板或其他任何内容,请告诉我。
UPDATE:好的,经过一番挖掘,我决定测试相同的代码,但使用NSMutableArray作为数据源而不是NSMutableDictionary。它的工作原理! 现在,有人可以向我解释为什么它不适用于字典吗?
这是做了什么。我有一个带有5个数组的字典,每个数组有5个字符串。
在numberOfRowsForSection方法中,我返回了[dict count]
在cellForRowAtIndexPath方法中,我使用了这段代码
NSArray * routeArray = [dealsDict objectForKey:@"route"];
cell.routeName.text = [routeArray objectAtIndex:indexPath.row];
NSArray * companyArray = [dealsDict objectForKey:@"company"];
cell.companyName.text = [companyArray objectAtIndex:indexPath.row];
NSArray * priceArray = [dealsDict objectForKey:@"price"];
cell.priceLabel.text = [priceArray objectAtIndex:indexPath.row];
NSArray * dateArray = [dealsDict objectForKey:@"date"];
cell.dateLabel.text = [dateArray objectAtIndex:indexPath.row];
NSArray * monthArray = [dealsDict objectForKey:@"month"];
cell.monthLabel.text = [monthArray objectAtIndex:indexPath.row];
NSLog(@"I'm in here");
return cell;
为什么不显示任何内容?
答案 0 :(得分:0)
在IB中,选择您的表格视图,并确保为您的控制器设置了delegate
和dataSource
个出口
答案 1 :(得分:0)
UITableView需要一些集合数据集作为数据源。它的委托方法“cellForRowAtIndexPath”被调用等于集合的元素数(ARRAY)。像numberOfRowsInSection委托告诉表视图,它需要为集合中的每个元素调用cellForRowAtIndexPath。并且它还需要一些迭代器来每次读取下一个元素,在字典的情况下,它总是在每次调用cellForRowAtIndexPath时都粘贴到相同的数据元素。我希望它会让你知道它的工作原理,如果你还需要了解其他信息,请告诉我。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.data count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MessagesCell *cell = [tableView dequeueReusableCellWithIdentifier:@"messageCellIdentifier"];
Message *msg = [self.data objectAtIndex:indexPath.row];
cell.Name.text = msg.Name;
cell.Message.text = msg.MessageText;
cell.Time.text = msg.Time;
return cell;
}