Добавление двух текстовых меток (одной динамической и одной статической) в одну ячейку таблицы

#ios #uitableview #textlabel

#iOS #uitableview #textlabel

Вопрос:

У меня есть tableview с пользовательскими ячейками внутри контроллера представления. Мой tableview работает должным образом. То, что я пытаюсь сделать, это программно разработать изображение ниже. Где «метка» — это пользовательский текст, который изменяется в зависимости от некоторого ввода. Как я могу включить эти 2 метки (в cellForRowAtIndexPath:) и определить их положение в ячейке. Изображение содержит 2 разные ячейки таблицы.

Изображение содержит 2 разные ячейки таблицы

Я знаю, как это сделать с помощью раскадровки, но мне нужно сделать это программно, потому что я использую динамические ячейки в xCode 4.5.

Изображение ссылается на индексные ячейки 1 и 2. До сих пор мне удавалось включать только одну текстовую метку на ячейку.

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {



static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier];
}




    switch ([indexPath row])
    {
        case 0:
        {
           // image cell - image resize and centred


            UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(30,2, 180, 180)];
            imv.image=[UIImage imageNamed:@"test1.jpg"];


            imv.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
            [cell.contentView addSubview:imv];

            imv.center = CGPointMake(cell.contentView.bounds.size.width/2,cell.contentView.bounds.size.height/2);

            cell.accessoryType = UITableViewCellAccessoryNone;

            break;
        }
        case 1:
        {


            cell.textLabel.text = @"Name";


            break;
        }

        case 2:
        {
            cell.textLabel.text = @"Manufacturer";

            break;
        }

        case 3:
        {
            cell.textLabel.text = @"Overall Score";

            break;
        }

        case 4:
        {
            cell.textLabel.text = @"Description";
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

            break;
        }

        case 5:
        {
            cell.textLabel.text = @"Videos";
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

            break;
        }
            }


    return cell;

}
  

Заранее благодарю

Комментарии:

1. вы должны включить что-то вроде того, что вы пробовали, код и т.д. Просто чтобы люди знали, чего вы не знаете / понимаете

2. Спасибо за ответ. Я добавил часть кода, с которой мне нужна помощь. @believesInSanta

Ответ №1:

Сначала проверьте стили UITableViewCell: UITableViewCellStyleDefault, UITableViewCellStyleValue1, UITableViewCellStyleValue2, UITableViewCellStyleSubtitle по умолчанию.

Если вы можете их использовать, вам не нужно создавать подкласс UITableViewCell. В противном случае вам придется сделать именно это и добавить 3 свойства: UIView и 2 UILabel . Причина в том, что если вы не используете стили ячеек по умолчанию, вы не сможете перемещать или добавлять элементы ячейки.

Ваш подкласс UITableViewCell должен иметь следующий код:

 @interface UITableViewCellSubClass : UITableViewCell
@property (nonatomic, strong) UIView *view;
@property (nonatomic, strong) UILabel *label1;
@property (nonatomic, strong) UILabel *label2;
@end

@implementation UITableViewCellSubClass
@synthesize view;
@synthesize label1;
@synthesize label2;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    view = [[UIView alloc] initWithFrame:self.frame];
    [self addSubview:view];
    // initiate label1 with position (10,10,150,20)
    label1 = [[UILabel alloc] initWithFrame:CGRectMake(10,10,150,20)];
    // initiate label2 with position (170,10,150,20)
    label2 = [[UILabel alloc] initWithFrame:CGRectMake(170,10,150,20)];
    [view addSubview:label1];
    [view addSubview:label2];
}
return self;
}
@end
  

Затем вы можете вернуть это в своем cellForRowAtIndex: методе и в основном:

 UITableViewCellSubclass *cell = [[UITableViewCellSubclass alloc] initWithStyle:UITableViewCellDefault reuseIdentifier:@"cell"];
[cell.label1 setText:@"text"];
[cell.label2 setText:@"more text"];
  

Надеюсь, это поможет, и не забудьте #импортировать «UITableViewCellSubClass.h»

Комментарии:

1. Большое вам спасибо. Извините за поздний ответ, но я был в отъезде. Еще раз спасибо

2. Могу я спросить вас кое о чем дополнительно? Если я не хочу, чтобы все ячейки имели одинаковый подкласс content / tableviewcell, какой самый простой способ сделать это через cellForRowAtIndex?

3. вы можете использовать разные подклассы tableviewcell, если у них разные идентификаторы повторного использования, или вы сами создаете все возможные UILabels, UIButtons и т.д. Со свойством type, которое будет определять позицию и т. Д

4. Спасибо. Почему, когда я использую ваш код, он говорит, что нет видимого @interface для ‘UIView’ объявляет селектор addSubview

5. вероятно, потому, что вам следует изменить его на addSubview