detailTextLabel在选择行之前不显示

时间:2015-03-06 09:50:54

标签: ios iphone

嘿伙计们我对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;
    }
}

所以我希望你的帮助谢谢你们

3 个答案:

答案 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

由于我们在确定空标签时并不确切知道发生了什么,因此最好不要将其设置为""。特别是如果细胞被重复使用。