Подтвердить что ты не робот

Вид сетки в iOS

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Для iOS 6 и выше я рекомендую UICollectionView и PSTCollectionView.

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

В 2010 году я рекомендовал AQGridView

Ответ 3

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

Ответ 4

Чтобы сделать простой вид сетки в представлении таблицы, создайте класс "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;
}

Ответ 5

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

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

Ответ 6

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