Загрузить AQGridViewCell из XIB (не работает) - PullRequest
3 голосов
/ 08 апреля 2011

Я использую класс AQGridView и пытаюсь загрузить ячейку из XIB .Я настроил XIB как пользовательскую ячейку для UITableView, но когда я пытаюсь загрузить ячейку, она просто пуста.Мне было интересно, есть ли более простой способ загрузить XIB .

AQGridViewCell необходимо загрузить ячейку из xib

- (AQGridViewCell *) gridView: (AQGridView *) gridView cellForItemAtIndex: (NSUInteger) index
{
    static NSString * CellIdentifier = @"cellID";
    gridCell * cell = (gridCell *)[gridView dequeueReusableCellWithIdentifier: CellIdentifier];
    if ( cell == nil ){
        gridCell = [[gridViewCell alloc] initWithFrame: CGRectMake(0,0,_gridView.frame.size.width/2-4, 
                                                                       _gridView.frame.size.height/2-8) 
                                       reuseIdentifier:CellIdentifier];
        cell = gridCell;
        self.gridCell = nil;
    }

    cell.title = @"Test Grid Item";
    cell.date  = @"Apr. 7, 2011";

    return ( cell );
}

Ответы [ 6 ]

7 голосов
/ 31 октября 2011

Вот статья , которая описывает, как загрузить AQGridViewCell из пера, с примером кода.Проверьте раздел под названием «AQGridViewCell многократного использования».

(Спасибо pt2ph8 за указание contentView.)

2 голосов
/ 26 июня 2012

Это заняло у меня некоторое время, но я подумал, что это не так, как упоминалось в блоге, упомянутом jlstrecker.

  1. Создайте подкласс AQGridViewCell - назовем его MyGridViewCell.
  2. Создайте перо для этой ячейки, свяжите его в IB.
  3. Опубликуйте представление в ТОП вид ячейки в IB. Это верно, вид на вершине зрения. Сделайте размер точно таким же.
  4. Для этого взгляда на в верхней части представления (назовем его view2), установите свойство tag (можно быть сделано в IB) до 1.
  5. Поместите все, что вы хотите связать, поверх view2, укрась свою камеру, как хочешь.
  6. Используйте следующий код (конечно, измените его в соответствии со своими потребностями) в своем подклассе AQGridViewController:

`

- (AQGridViewCell *)gridView:(AQGridView *)aGridView cellForItemAtIndex:(NSUInteger)index {
    static NSString *CellIdentifier = @"MyGridViewCell";
    MyGridViewCell *cell = (MyGridViewCell *)[self.gridView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = (ZZProductGridViewCell *)[[[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil] objectAtIndex:0];
    }

    [cell.contentView addSubview:[cell viewWithTag:1]]; //THIS IS THE IMPORTANT PART

    return cell;
}

Наслаждайтесь!

2 голосов
/ 21 апреля 2011

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

Разработчики AQGridView однажды заявили на GitHub, что в будущем будет добавлена ​​надлежащая поддержка IB, но этот пост датирован августом 2010 года, так что не останавливайтесь.

0 голосов
/ 12 января 2013

Создайте свою ячейку как обычно, используя IB, затем в своем подклассе AQGridViewCell добавьте

- (void)awakeFromNib{
    self.contentView.backgroundColor = [UIColor clearColor];
}
0 голосов
/ 08 апреля 2011

Что вы можете сделать, это выполнить распаковку / загрузку вашего xib (uiview) в самом подклассе (который имеет метод init, отличный от uitableviewcell) Вы также можете подключить любые выходы к этому XIB и добавить его весь вид как подпредставление, или, возможно, заменить contentview).

Чтобы сделать его еще быстрее, вы можете сделать uinib из этого xib и использовать его повторно для сохранения дискового ввода-вывода.

0 голосов
/ 08 апреля 2011

Я не знаком с AQGridView, но полагаю, что вы можете использовать возможности загрузки Nib NSBundle.Выдержка из примера проекта AdvancedTableViewCells иллюстрирует идею:

RootViewController.h

@interface RootViewController : UITableViewController
{
    ApplicationCell *tmpCell;
}

RootViewController.m

ApplicationCell *cell = (ApplicationCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
    [[NSBundle mainBundle] loadNibNamed:@"IndividualSubviewsBasedApplicationCell" owner:self options:nil];
    cell = tmpCell;
    self.tmpCell = nil;
}

Внутри IndividualSubviewsBasedApplicationCell.xib вам нужно будет установить выход UITableViewCell, который будет внутри свойства tmpCell RootViewController.Затем, в качестве побочного эффекта от вызова метода loadNibNamed от NSBundle, свойство tmpCell устанавливается на RootViewController через механизм загрузки Nib.

...