Текстовая метка в табличном представлении слишком длинная, что влияет на правильную деталь (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?