Пользовательский UITableViewCell из xib не отображается должным образом - PullRequest
2 голосов
/ 18 марта 2011

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

У меня есть SettingsTableCell, который является подклассом UITableViewCell. У меня есть SettingsTableCell.xib, который содержит UITableViewCell и внутри, которые являются парой меток и текстовым полем. Я установил тип класса в xib равным SettingsTableCell и владельцем файла xib для моего контроллера таблицы.

Мой SettingsTableController имеет свойство IBOutlet с именем tableCell. Мой cellForRowAtIndexPath содержит следующий код для загрузки xib моего табличного представления и назначения его свойству tableCell контроллера таблицы:

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

    static NSString *CellIdentifier = @"CellSettings";

    SettingsTableCell *cell = (SettingsTableCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"SettingsTableCell" owner:self options:nil];

        cell = self.tableCell;
        self.tableCell = nil;
        NSLog(@"cell=%@", cell);
    }

    // Configure the cell...
    NSArray *sections = [self.settingsDictionary objectForKey:KEY_GROUPS];

    NSDictionary *sectionInfo = [sections objectAtIndex:[indexPath section]];

    NSArray *itemsInSection = [sectionInfo objectForKey:KEY_FIELDS];

    NSDictionary *item = [itemsInSection objectAtIndex:[indexPath row]];

    cell.textLabel.text = [item objectForKey:KEY_LABEL_NAME];
    cell.labelName.text = [item objectForKey:KEY_LABEL_NAME];
    cell.labelUnitsType.text = [item objectForKey:KEY_LABEL_UNITS];

    return cell;
}

Вот как выглядит мой xib в IB: Screenshot of Interface Builder

Когда я запускаю свое приложение, таблица отображается так, как будто все ячейки являются стандартными ячейками стиля по умолчанию: Screenshot of my table view

Серьезно странная часть, хотя ... если я коснусь области ячейки, где ДОЛЖНО быть текстовое поле, клавиатура действительно появится! Текстовое поле не видно, нет курсора или чего-то в этом роде ... но оно отвечает. Очевидно, что видимая UILabel - это не UILabel из моей xib, потому что метка в моей xib выравнивается по правому краю, а метка, показанная в приложении, выравнивается по левому краю.

Я невероятно смущен тем, как это происходит. Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Вот код для моего класса SettingsTableCell:

@interface SettingsTableCell : UITableViewCell {

    UILabel *labelName;
    UILabel *labelUnitsType;
    UITextField *field;

}

@property (nonatomic, retain) IBOutlet UILabel *labelName;
@property (nonatomic, retain) IBOutlet UILabel *labelUnitsType;
@property (nonatomic, retain) IBOutlet UITextField *field;

@end

#import "SettingsTableCell.h"


@implementation SettingsTableCell

@synthesize labelName;
@synthesize labelUnitsType;
@synthesize field;

- (void)dealloc {
    [labelName release];
    labelName = nil;
    [labelUnitsType release];
    labelUnitsType = nil;
    [field release];
    field = nil;

    [super dealloc];
}


@end

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Я не знаю почему , но я знаю, что странные вещи случаются при сохранении ячейки в переменных экземпляра.

Вы пытались загрузить ячейку непосредственно в cellForRowAtIndexPath?

if (cell == nil) {
    topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyNibName" owner:nil options:nil];
    for (id currentObject in topLevelObjects) {
        if ([currentObject isKindOfClass:[UITableViewCell class]]) {
            cell = currentObject;
            break;
        }
    }
}

Ваш полный код для cellForRowAtIndexPath и SettingsTableCell.h / m будет полезен.

0 голосов
/ 18 марта 2011

Моя первая мысль (вероятно, неправильная!) Заключается в том, что это проблема с z-порядком, и что ярлык по умолчанию для ячеек отображается поверх вашего элемента управления для редактирования текста.Следовательно, не в состоянии увидеть это.Я предполагаю, что это все еще отвечает, потому что прикосновение проходит через этикетку.

Просто предположение: -)

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