2010-02-15 12 views
19

Me gustaría crear una vista de cuadrícula en mi aplicación de iPhone similar a la que se muestra en el iPad photos app. Sé que el iPhone 3.2 SDK está bajo NDA, pero hay una biblioteca o marco disponible para agregar este tipo de funcionalidad (que no es SDK). Idealmente, me gustaría desarrollar una versión iPad de la aplicación, donde la cuadrícula sería de 3 elementos de ancho en el retrato y 4 en el paisaje, sin embargo, por el momento me gustaría 2 artículos de ancho en el retrato y 3 de ancho en el paisaje.Vista de cuadrícula en el SDK de iPhone

La única forma en que puedo pensar en hacer esto es subclasificando UITableView y teniendo una celda personalizada que crea los 2 o 3 elementos. Sin embargo, esto parece desordenado y estoy seguro de que hay una mejor manera.

Un artículo típico tendrá una imagen, etiqueta y botón, nada demasiado complicado.

Gracias

Respuesta

9

Puede seguir utilizando el UITableView para esto y que no habría necesidad de una subclase. Como dijiste, todo lo que tienes que hacer es crear tu propia celda personalizada, que no sea complicada. No sucio en absoluto :)

+0

imagen se mostrará bien, pero ¿qué se puede hacer? f Quiero tocar una imagen. En ese caso, se seleccionará toda la fila, no la única UIView dentro de la UITableViewCell personalizada. – vikmalhotra

+2

use UITapGestureRecognizer adjunto a cada UIImageView en lugar de usar didSelectRowAtIndexPath – Doug

25

Para iOS 6 y superior, recomiendo UICollectionView y PSTCollectionView.

El objetivo es utilizar PSTCollectionView en iOS 4/5 como punto de retorno y interruptor para UICollectionView en iOS6. Incluso usamos ciertos trucos de tiempo de ejecución para crear UICollectionView en tiempo de ejecución para versiones anteriores de iOS. Idealmente, solo vincula los archivos y todo funciona en sistemas anteriores .

En el año 2010 me recomendaron AQGridView

+0

. Me gustaría agregar que en este momento el modo de diseño horizontal tiene errores. Si está interesado en esta función, considere usar otra cosa. – Nailer

+0

@Nailer, actualicé un poco mi respuesta para recomendar UICollectionView en lugar de AQGridView. – catlan

10

Soy consciente de que esto es muy antiguo, pero yo era la búsqueda de respuestas a esto y probado varias soluciones. Descubrí que GMGridView era una de las mejores soluciones con errores. Échale un vistazo al https://github.com/gmoledina/GMGridView.

+0

Desde esta publicación, recientemente cambié al uso de KKGridView en mis proyectos. Compruébelo en https://github.com/kolinkrewinkel/KKGridView. – morcutt

+0

¿Desea comentar por qué cambió? Solo curiosidad por las diferencias. – Nailer

+0

@morcutt He usado GMGridView y lo encontré muy bien (hasta ahora). También me gustaría saber por qué cambiaste ... –

-1

Recomendaría usar UITableViewCells personalizadas. En iOS 5 no es necesario que los subclases. Simplemente agregue un tableView a su proyecto, agregue un prototipo de celdas (= celda personalizada) usando Xcode a tableView, asígneles un identificador único y use este identificador en cellForRowAtIndexPath para quitar la cola y crear una instancia de su celda personalizada. Luego configura la celda y regresa.

1

NRGridView parece ser la mejor opción. Puede encontrarlo here.

Tiene los métodos similares a UITableView. Las celdas se pueden personalizar según sea necesario.

2

Para hacer simple punto de vista de cuadrícula en la vista de tabla crear la clase "GridViewCell" y en el archivo de cabecera complemento:

@interface GridViewCell : UITableViewCell 

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

@end 

en el archivo .m añadir este código:

#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 

y cuando se crea su tabla utiliza la nueva clase "GridView" en delegate 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; 
} 
+0

Esta es también la manera más simple que puedo pensar sin usar UICollectionView (solo disponible desde iOS 6) o bibliotecas de terceros. Pero también estoy leyendo el código fuente de esas 3 bibliotecas para ver si hay alguna forma mejor, pero parecen ser más complicadas de comprender. No estoy seguro de si me perdí alguna parte clave. –

Cuestiones relacionadas