Добавление дополнительного UIlabel к каждой ячейке - PullRequest
1 голос
/ 23 июля 2011

Я пытаюсь добавить дополнительные UILabel в каждую ячейку (UITableView) Мне удалось с этим кодом в
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath метод

Вот мой код

//add another text
UILabel *test = [[UILabel alloc] initWithFrame:CGRectMake(250,80,50,20.0)];
test.text =  [NSString stringWithFormat: @"test"];
test.backgroundColor = [UIColor clearColor];
test.font=[UIFont fontWithName:@"AppleGothic" size:20];
[cell addSubview:test];

Однако я решил, что если я сделаю это, я не смогу добавить разный текст в каждую ячейку, вместо этого он заканчивается одинаковым текстом во всех ячейках. Может кто-нибудь сказать мне, как это сделать?
Да, и еще одна проблема заключалась в том, что если я это сделаю, «test» будет отображаться в каждой ячейке, кроме первой.

Ответы [ 3 ]

5 голосов
/ 23 июля 2011

Взгляните на учебник " UITableView - Добавление подпредставлений в представление содержимого ячейки ".

Попробуйте что-то вроде этого

- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier {

    CGRect CellFrame = CGRectMake(0, 0, 320, 65);
    CGRect Label1Frame = CGRectMake(17,5,250,18);  

    UILabel *lblTemp;

    UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CellFrame reuseIdentifier:cellIdentifier] autorelease];  
    lblTemp = [[UILabel alloc] initWithFrame:Label1Frame];
    [lblTemp setFont:[UIFont fontWithName:@"Arial-BoldMT" size:15]];
    lblTemp.tag = 1;
    lblTemp.backgroundColor=[UIColor clearColor];
    lblTemp.numberOfLines=0;
    [cell.contentView addSubview:lblTemp];      
    return cell;  // this I forgot  
}

в cellForRowAtIndexPath

{
    if(cell == nil)
            cell = [self getCellContentView:CellIdentifier];

    UILabel *lblTemp1 = (UILabel *)[cell viewWithTag:1];  
    lblTemp1.text =[nameArray objectAtIndex:value+indexPath.row];  
        return cell;
}
2 голосов
/ 23 июля 2011

Сначала проверьте, работает ли какой-либо из предопределенных стилей.

Если вам требуется больше гибкости, чем то, что они предлагают, вы можете попробовать что-то вроде этого:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [self makeCell: CellIdentifier];
    }

    MyData *data =  [self.data objectAtIndex:indexPath.row];

    UILabel *lbl1 = (UILabel *)[cell viewWithTag:1];
    UILabel *lbl2 = (UILabel *)[cell viewWithTag:2];

    lbl1.text = data.text;
    lbl2.text = data.auxText;    

    return cell;
}


- (UITableViewCell *)makeLensListCell: (NSString *)identifier
{
    CGRect lbl1Frame = CGRectMake(10, 0, 140, 25);
    CGRect lbl2Frame = CGRectMake(10, 150, 140, 25);

    UILabel *lbl;

    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier] autorelease];

    // Label with tag 1.
    lbl = [[UILabel alloc] initWithFrame:lbl1Frame];
    lbl.tag = 1;
    [cell.contentView addSubview:lbl];
    [lbl release];

    // Label with tag 2.
    lbl = [[UILabel alloc] initWithFrame:lbl2Frame];
    lbl.tag = 2;
    lbl.textColor = [UIColor lightGrayColor];
    [cell.contentView addSubview:lbl];
    [lbl release];

    // Add as many labels and other views as you like

    return cell;
}

Этот подход такжепозволяет изображения и другие виды.

2 голосов
/ 23 июля 2011

Для того, чтобы иметь одинаковую метку на всех ячейках, вы, вероятно, создаете экземпляр только одной ячейки и используете cellReUseIdentifier для всех ячеек. Итак, я предлагаю вам создать разные метки в качестве свойств класса и назначить каждый property-label каждой ячейке.

// For example - 

if (indexPath.row ==0 )
  // assign [cell.contentView addSubview: self.label1];

if (indexPath.row ==1 )
  // assign [cell.contentView addSubview: self.label2];

А для второй части вопроса, пожалуйста, напишите свой cellForRowAtIndexPath полностью - в этом может быть ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...