Текстовая метка в табличном представлении слишком длинная, что влияет на правильную деталь (detailTextLabel), которая будет закрыта или не показана

Я установил текст для этой ячейки, но, тем не менее, текст, который он отображает, слишком длинный, что влияет на нужный подробный текст, который будет покрыт или не показан.

Я не могу изменить его, так как мне нужно имя в следующем контроллере представления. Можно ли разрешить ему просто отображать текст с последующим "...."?

ПРИМЕР:

Электрические и электронные Engi.... 01 >

ЛЕГЕНДА: "Electrical & Electronic Engi...." как текст, отображаемый в табличном представлении, "01" как detailTextLabel справа и ">" как навигация.

Вот как это должно выглядеть, http://oi58.tinypic.com/2j4vg5k.jpg, но из-за того, что какой-то текст слишком длинный, вот что появляется: http://oi58.tinypic.com/erc177.jpg

Кажется, что textLabel и detailTextLabel не помещаются или не отображаются во всей строке. Я хотел бы, чтобы правильный detailTextLabel был все еще там, будет ли textLabel заканчиваться на "...."

Благодарю.

(Я новичок в программировании iOS)

2 ответа

Решение

Для этого вам придется ограничить ширину textLabel по умолчанию для UITableViewCell или добавить новую UILabel в ячейку.

у вас есть два варианта

1) Не используйте textLabel по умолчанию для ячейки, создайте новую UILabel и добавьте ее в качестве подпредставления ячейки табличного представления.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    // Configure the cell using custom cell

    //restrict width here while creating label (change 40 to what you want)
    UILabel *tempLabel=[[UILabel alloc]initWithFrame:CGRectMake(0,0,40,20)];

   tempLabel.text=@"The text you want to assign";
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];



        [[cell contentView] addSubview:tempLabel];
    }

    return cell;
}

2) Или второй способ - изменить ширину textLabel по умолчанию, для этого вам нужно будет создать новый подкласс, наследующий UITableViewCell, и в методе переопределения подкласса (void)layoutSubView и в этом методе изменить ширину (сделать это методом проб и ошибок)

создать новый класс со следующими файлами.h и.m

////CustomCell .h file

#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell

@end

////CustomCell .m file

#import "CustomCell.h"

@implementation CustomCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)layoutSubviews{
    [super layoutSubviews];

    CGRect tempFrame=self.textLabel.frame;

     //whatever you want to set
     tempFrame.width=30;
     self.textLabel.frame=tempFrame;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

Или другой вариант (лучше)

3) Создать настраиваемую ячейку таблицы

учебник по созданию пользовательских таблиц

И для того, чтобы... в конце UILabel было свойство truncateTail из UILabel. Вы можете использовать это.

Хотя конфигурация ячейки немного отличается (только метка детализации и индикатор раскрытия отсутствует), этот ответ может быть полезен: как я могу обрезать текст в ячейке TextLabel UITableView, чтобы он не скрывал DetailTextLabel?

Другие вопросы по тегам