我正在尝试在表视图中填充单元格(我有两个自定义类型的单元格,在storyboard中创建了不同的元素,标识符为“info_cell”和“person_cell”,在UITableView上方的分段控件上我决定加载什么[tableView重载])。当我尝试访问单元格内的UILabel时,我得到的标签为空。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *CellIdentifier = (viewType == INFO_VIEW) ? @"info_cell" :@"person_cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if(viewType == INFO_VIEW){
NSLog(@"INFO = %@", info_text_some_string);
UILabel *lblInfo = (UILabel *)[cell viewWithTag:200];
[lblInfo setText:info_text_some_string];
}
else{
// there is part for person
}
return cell;
}
当我在表中只有一个原型单元格(UITableView在UIVewController中)时,相同的代码可以工作。这里有什么问题,我已经检查了100次:单元格标识符没问题,标签标签是200。
这是UISegmentControl
的操作- (IBAction)changeView:(id)sender {
UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;
if (selectedSegment == 0) {
viewType = INFO_VIEW;
}
else{
viewType = PERSON_VIEW;
}
[tableView reloadData];
}
我为tableView添加了必要的方法并连接了delegate i数据源。 有没有人知道为什么它是null?
答案 0 :(得分:0)
尝试这个通常我按照这个过程每当我使用自定义单元格 CellRorRowAtIndexPath
if(!cell)
{
cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
//customcell is your UITableViewCell created by you in ur xib
NSData *archivedData =[NSKeyedArchiver archivedDataWithRootObject:customcell];
cell =[NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
}
if(viewType ==INFO_VIEW)
{
[(UILabel *)[cell viewWithTag:200] setText:@"you text"];
}
else{
// person view....
}
这样您就可以收集单元格的所有元素并为其设置值。请分享您的结果
答案 1 :(得分:0)
假设您正确地为UITableViewCells创建子类(例如我使用InfoCell和PersonCell),您可以尝试这样做:
if(viewType == INFO_VIEW)
{
InfoCell *cell = (InfoCell *)[tableView dequeueReusableCellWithIdentifier:@"info_cell"];
// do your stuff for info here
}
else if(viewType == PERSON_VIEW)
{
PersonCell *cell = (PersonCell *)[tableView dequeueReusableCellWithIdentifier:@"person_cell"];
// do your stuff for person here
}
答案 2 :(得分:-1)
为什么不做这样的事情?
[[cell textLabel] setText: @"text goes here"];
跳过UILabel部分?