2013-05-12 1 views
3

я следовал документации компании Apple о добавлении подвида к UITableViewcellhereПоказав галочку аксессуар вид переместить содержимое таблицы

добавить 3-ю метку в ячейку. Проблема заключается в том, что когда я показываю стандартную аксессуарную галочку справа, содержимое всей ячейки перемещается влево, даже когда я не показывал третий ярлык. Снимок экрана ниже pic.

И вот мой код:

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

    static NSString *CellIdentifier = @"MyCell"; 

    UILabel *mainLabel, *secondLabel, *thirdLabel; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    //cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
    cell.accessoryType = UITableViewCellAccessoryNone; 

    mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 2.0, 100.0, 21.0)]; 
    mainLabel.tag = MAINLABEL_TAG; 
    //mainLabel.font = [UIFont systemFontOfSize:14.0]; 
    //mainLabel.font = [UIFont fontWithName:@"Geeza Pro Bold" size:17.0]; 
    mainLabel.font = [UIFont boldSystemFontOfSize:17]; 
    mainLabel.textAlignment = UITextAlignmentLeft; 
    mainLabel.textColor = [UIColor blackColor]; 
    mainLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:mainLabel]; 

    secondLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0, 22.0, 100.0, 21.0)]; 
    secondLabel.tag = SECONDLABEL_TAG; 
    //secondLabel.font = [UIFont systemFontOfSize:12.0]; 
    //secondLabel.font = [UIFont fontWithName:@"Geeza Pro" size:15.0]; 
    secondLabel.font = [UIFont systemFontOfSize:15]; 
    secondLabel.textAlignment = UITextAlignmentLeft; 
    secondLabel.textColor = [UIColor darkGrayColor]; 
    secondLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:secondLabel]; 

    thirdLabel = [[UILabel alloc] initWithFrame:CGRectMake(203.0, 11.0, 70.0, 21.0)]; 
    thirdLabel.tag = THIRDLABEL_TAG; 
    //thirdLabel.font = [UIFont systemFontOfSize:12.0]; 
    //thirdLabel.font = [UIFont fontWithName:@"Geeza Pro Bold" size:17.0]; 
    thirdLabel.font = [UIFont boldSystemFontOfSize:17]; 
    thirdLabel.textAlignment = UITextAlignmentRight; 
    thirdLabel.textColor = [UIColor darkGrayColor]; 
    thirdLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:thirdLabel]; 


} 
    else 
    { 
     mainLabel = (UILabel *)[cell.contentView viewWithTag:MAINLABEL_TAG]; 
     secondLabel = (UILabel *)[cell.contentView viewWithTag:SECONDLABEL_TAG]; 
     thirdLabel = (UILabel *)[cell.contentView viewWithTag:THIRDLABEL_TAG]; 
    } 

    Car *car = [self.dataModel carAtIndex:indexPath.row]; 
    NSString *carName = [NSString stringWithFormat:@"%@",car.deviceName]; 
    NSString *carDetails = [NSString stringWithFormat:@"%@ at %@",car.date,car.location]; 
    NSString *carSpeed = [NSString stringWithFormat:@"%@ km/h",car.speed]; 


    mainLabel.text = carName; 
    secondLabel.text = carDetails; 
    thirdLabel.text = carSpeed; 

return cell; 
} 

UPDATE: Я изменил UIViewAutoresizingFlexibleLeftMargin к UIViewAutoresizingFlexibleWidth по совету @MattG. Теперь, когда ячейка выбрана, ярлыки не перемещаются влево, а частично частично покрыты, как показано на рисунке ниже. enter image description here

Возможно, это вызвано моим - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath? Вот его код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if([tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark){ 
     [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; 
    } 
    else 
    { 
     [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
} 
+0

Ознакомьтесь с этим руководством - он должен решить вашу проблему http://www.edumobile.org/iphone/iphone-programming-tutorials/impliment-a-custom-accessory-view-for-your-uitableview-in-iphone/ –

+0

этот блог также полезен http://joshgrenon.com/2009/07/20/iphone-development-how-to-create-checkmarks-in-a-uitableview/ –

+1

Похоже, вы должны делать UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth. Не UIViewAutoresizingFlexibleLeftMargin. –

ответ

0

Я бы начал с рассмотрения Apple Table View Programming Guide for iOS. Он имеет раздел «A Closer Look at Table View Cells», который разбивает макеты предварительно определенных ячеек.

Глядя на ваш код У вас достаточно времени в ваших ячейках, чтобы рассмотреть подкласс UITableViewCell для создания собственной пользовательской ячейки. Вы можете удалить весь свой код установки для ярлыков ячеек в один класс и просто позаботиться о настройке ячейки в методе cellForRowAtIndexPath:.

Однако ваш вопрос сосредоточен на макете ячейки таблицы. Несколько раз полезно устанавливать фоны subviews в разные цвета, чтобы вы могли видеть, какое пространство используется, каким подзоном и как оно взаимодействует, если мы представим другие подвидные объекты, в этом случае вид аксессуаров.

Чтобы устранить проблему с усеченным текстом третьего ярлыка, нужно сначала настроить ярлык на работу с меньшим размером шрифта. Я бы сделал это для всех лейблов. Этикетки теперь должны корректировать текст на основе ширины метки. Вы также должны проверить свойство выравнивания текста, чтобы подтвердить, что они настроены на лучший вариант.

thirdLabel.adjustsFontSizeToFitWidth = YES; 
thirdLabel.minimumScaleFactor = 0.4f; 

Результаты этих изменений могут быть достаточными для устранения усечения и сохранения макета, который у вас есть.

 Смежные вопросы

  • Нет связанных вопросов^_^