Вопрос

Я хотел бы создать представление сетки в моем приложении для iPhone, аналогичное тому, что показано в Приложение для фотографий для iPad.Доступна ли библиотека или фреймворк для добавления такого рода функциональности (не SDK)?В идеале я хотел бы в конечном итоге разработать версию приложения для iPad, где сетка имела бы ширину в 3 элемента в портретном и 4 в альбомном режиме, однако на данный момент я хотел бы, чтобы ширина в портретном режиме составляла 2 элемента, а в альбомном - 3.

Единственный способ, которым я могу это сделать, - создать подкласс UITableView и создать пользовательскую ячейку, которая создает 2 или 3 элемента.Это, однако, кажется беспорядочным, и я уверен, что есть лучший способ.

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

Это было полезно?

Решение

Вы все еще можете использовать UITableView для этого, и вам не нужно будет создавать его подкласс.Как вы сказали, все, что вам нужно сделать, это создать свою собственную пользовательскую ячейку, в которой нет ничего сложного.Совсем не грязно :)

Другие советы

Для iOS 6 и выше я рекомендую UICollectionView ( Пользовательский просмотр ) и Просмотр PSTCollectionView.

Цель состоит в том, чтобы использовать PSTCollectionView на iOS 4/5 в качестве запасного варианта и переключиться на UICollectionView на iOS6.Мы даже используем определенные приемы выполнения для создания UICollectionView во время выполнения для более старых версий iOS.В идеале, вы просто связываете файлы, и все работает на старых системах .

В 2010 году я рекомендовал AQGridView ( Просмотр сетки )

Я знаю, что это очень старое, но я искал ответ на этот вопрос и протестировал несколько решений.Я обнаружил, что GMGridView было одним из лучших и наименее глючных решений.Проверьте это на https://github.com/gmoledina/GMGridView.

Чтобы создать простое представление сетки в вашем табличном представлении, создайте класс "GridViewCell" и в заголовочный файл добавьте:

@interface GridViewCell : UITableViewCell

@property (nonatomic, strong)  UIButton *column1;
@property (nonatomic, strong)  UIButton *column2;
@property (nonatomic, strong)  UIButton *column3;

@end

в файл .m добавьте этот код:

#define CELL_WIDTH 100
#define CELL_HEIGHT 80

#import "GridViewCell.h"

@implementation GridViewCell

@synthesize column1, column2, column3;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    column1 = [[UIButton alloc] initWithFrame:CGRectMake(5, 5, CELL_WIDTH, CELL_HEIGHT)];
    [self addSubview:column1];
    column2 = [[UIButton alloc] initWithFrame:CGRectMake(CELL_WIDTH+ 10, 5, CELL_WIDTH, CELL_HEIGHT)];
    [self addSubview:column2];
    column3 = [[UIButton alloc] initWithFrame:CGRectMake(CELL_WIDTH + CELL_WIDTH + 15, 5, CELL_WIDTH, CELL_HEIGHT)];
    [self addSubview:column3];
}
return self;
}

@end

и когда вы создаете свою таблицу, используйте новый класс "GridView" в делегате cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    GridViewCell *cell = (GridViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[GridViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    [cell.column1 setBackgroundColor:[UIColor blackColor]];
    [cell.column2 setBackgroundColor:[UIColor blackColor]];
    [cell.column3 setBackgroundColor:[UIColor blackColor]];

    return cell;
}

NRGridView, по-видимому, является лучшим способом обхода.Вы можете найти это здесь.

Он имеет те же методы, что и UITableView.Ячейки могут быть настроены по мере необходимости.

Я бы рекомендовал использовать пользовательские UITableViewCells.В iOS 5 вам не нужно их подклассировать.Просто добавьте TableView в свой проект, добавьте прототип ячеек (= пользовательскую ячейку) с помощью Xcode в TableView, присвоите им уникальный идентификатор и используйте этот идентификатор в cellForRowAtIndexPath для удаления из очереди и создания экземпляра вашей пользовательской ячейки.Затем установите ячейку и верните ее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top