嘿伙计们我对uitableviewcell有问题,问题在于detailTextLabel,我在故事板中设置了正确的细节。当视图出现时,除了detailTextLabel的字符串之外的所有内容都会显示出来。所以现在对于真正奇怪的部分,当我突然选择一行时,文本出现了。
所以这里是我的cellAtIndexPathRow代码:方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0 || indexPath.section ==2) {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"lastCell" forIndexPath:indexPath];
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:UITableViewAutomaticDimension];
switch (indexPath.section) {
case 0:
_datePicker = [UIDatePicker new];
_datePicker.datePickerMode = UIDatePickerModeTime;
[cell addSubview:_datePicker];
break;
case 2:
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.textLabel.textColor = [UIColor redColor];
cell.textLabel.text = NSLocalizedString(@"Delete alarm", nil);
break;
}
return cell;
} else {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:UITableViewAutomaticDimension];
cell.detailTextLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:UITableViewAutomaticDimension];
//cell.detailTextLabel.text = @"";
switch (indexPath.row) {
case 0:
cell.textLabel.text = NSLocalizedString(@"Repeat", nil);
cell.detailTextLabel.text = @"Mo. Tu. We.";
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 1:
cell.textLabel.text = NSLocalizedString(@"Cycles", nil);
cell.detailTextLabel.text = @"7";
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 2:
cell.textLabel.text = NSLocalizedString(@"Description", nil);
cell.detailTextLabel.text = @"Alarm";
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 3:
cell.textLabel.text = NSLocalizedString(@"Sound", nil);
cell.detailTextLabel.text = @"Radar";
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 4:
_snoozeSwitch = [UISwitch new];
[_snoozeSwitch setOn:YES];
[_snoozeSwitch addTarget:self
action:@selector(updateSwitch:)
forControlEvents:UIControlEventValueChanged];
cell.accessoryView = _snoozeSwitch;
cell.textLabel.text = NSLocalizedString(@"Snooze", nil);
cell.detailTextLabel.text = @"";
break;
default:
NSLog(@"%s:BUG!",__PRETTY_FUNCTION__);
}
return cell;
}
}
所以我希望你的帮助谢谢你们
答案 0 :(得分:5)
在将detailTextLabel
更改为空字符串后,您是否在iOS 8中遇到此问题:
cell.detailTextLabel.text = @"";
然后稍后将文本更改为不同的非空字符串,该字符串不会出现。
如果您打印detailTextLabel
框架,则可以看到detailTextLabel
尺寸:{0,0}
设置文本后尝试[cell setNeedsLayout];
它适用于这种情况。
Helpful link
#Edit
我在iOS 8.1中进行了测试[cell setNeedsLayout];
无法正常工作
请尝试使用[cell layoutIfNeeded];
答案 1 :(得分:0)
我遇到了同样的问题,我能想出的最佳解决方案是将文本设置为@“”而不是@“”。 [cell setNeedsLayout] [cell layoutIfNeeded] 和/或 [reloadRowsAtIndexPaths .. 一切都不适合我。
答案 2 :(得分:0)
我们无法查看导致此行为的代码,但我们可以尝试了解他们的意图。我打赌他们不会初始化标签,因为他们不想将资源用于空的UILabel。在所有detailTextLabel都是可选的后,它可能不存在。
创建单元格时,apple会自动将detailTextLabel.text设置为" Subtitle" (在界面构建器中)。因此,而不是将文本更改为""设置默认的“Subtitle"隐藏。
cell.detailTextLabel?.hidden = true
由于我们在确定空标签时并不确切知道发生了什么,因此最好不要将其设置为""。特别是如果细胞被重复使用。