2012-01-25 8 views
13

Estoy tratando de utilizar el nuevo diseñador de Guion gráfico y la facilidad de dibujar celdas UITableView en lugar de "diseñar" programáticamente cada fila.iPhone- cómo usar Storyboard con células UITableView personalizadas y CellWithIdentifier

Un buen ejemplo de una célula normal se vincula aquí en desbordamiento de pila: iPhone - dequeueReusableCellWithIdentifier usage

En lugar del enfoque vinculado de utilizar "[celular textLabel]" Quiero usar mis propias etiquetas, botones e imágenes en la parte superior de cada fila Por lo tanto, creé varias celdas/filas prototipo y les asigné identificadores (usando Storyboard).

Ahora: ¿cuál es la forma más inteligente de acceder a los controles/etiquetas "personalizados" de cada fila? Traté de buscar para acceder a ellos por ID, pero no encontré nada. Mi pensamiento se debe trabajar a lo largo de estas líneas:

[[[cell subviews] getObjectByID:@"labelTime"] setText:@"Whatever"]; 

¿Es mi expectativa de las API completamente equivocado o no acabo de encontrar la API de la derecha, sin embargo?

¿Alguna idea o recomendación?

Respuesta

31

Para cada nueva UITableViewCell personalizada que cree en el guión gráfico, querrá crear un nuevo archivo de clase que implemente UITableViewCell para vincularlo. Asegúrese de asignar todos los controles de su nueva celda a las propiedades de la instancia en el guión gráfico. A continuación, solo lo utilizará para la eliminación de secuencias como de costumbre:

YourTableViewCellClass *cell = (YourTableViewCellClass*)[tableView dequeueReusableCellWithIdentifier:@"YourCellIdentifierStringDefinedInStoryBoard"]; 
// then set the properties for the class. 
cell.labelTime = @"whatever"; 
+0

¡Háblame, esto fue casi simple! –

+0

Sí, me acabo de dar cuenta de este uso hace una semana o así, lo encuentro muy agradable y rápido. – mservidio

+0

Perfecto ... Gracias por la idea –

8

Hay dos formas de acceder a las subvistas personalizadas. La forma más simple es usar etiquetas. Cada vista tiene una propiedad tag que es un número entero. Puede establecer la etiqueta en el plumín y establecerla o obtenerla en el código. Puede buscar un árbol de vista para ver una etiqueta determinada enviando viewWithTag: a la raíz del árbol. Así, por ejemplo, usted podría dar su punto de vista labelTime la etiqueta 57, y en su código, que iba a encontrar la vista como esta:

UILabel *label = (UILabel *)[cell viewWithTag:57]; 

La desventaja de usar las etiquetas es que usted tiene que mantener los números de etiqueta en sincronización entre su plumilla y su código. Si no se sincronizan, obtendrás una vista incorrecta o obtendrás cero (y dado que puedes enviar mensajes a cero, el sistema no te dará un error cuando eso ocurra). Aún así, las etiquetas son tan prácticas que es bastante común usarlas así.

La otra forma es crear una subclase personalizada de UITableViewCell con una propiedad IBOutlet para cada subvista personalizada. Puede conectar las salidas a las subvistas en la punta, y acceder a los subvistas a través de las propiedades en su código:

MyTableViewCell *myCell = (MyTableViewCell *)cell; 
UILabel *label = cell.labelTime; 

Esto implica escribir mucho más repetitivo que el uso de las etiquetas, pero tiene la ventaja de que se quiere recibe advertencias o errores (ya sea en tiempo de compilación o cuando intenta cargar la plumilla por primera vez) si su plumilla y su código no se sincronizan.

+1

Si alguien está intentando usar este método, solo tenga en cuenta que es muy difícil entender el significado de viewWithTag: 57. Es mucho mejor para subclasificar el UITableViewCell. –

6

No seas un bobo como yo. :)

asegúrese de que establece el valoridentificador en el Atributos inspector de la célula de medida.Establecer el ID de restauración de la celda personalizada en el Identity Inspector es el camino equivocado, y eso es exactamente lo que hice. Major facepalm para mí.

0

Para obtener más detalles sobre la implementación de cómo hacerlo, utilizando los métodos descritos por mservidio y rob, consulte la sección "Diseño de nuestras propias células de prototipo" en this tutorial.

Cuestiones relacionadas