2012-10-05 36 views
5

Tengo una celda de tabla personalizada heredada de UITableViewCell. Está funcionando bien.¿Cómo heredar un archivo XIB en un proyecto de iOS?

Ahora tengo que hacer el mismo tipo de celda para otra pantalla con pequeñas modificaciones. Lo que estaba planeando es que herede mi vieja clase celular para reutilizar su diseño y lógica, pero no pude encontrar la manera de heredar un archivo xib.

¿Debo copiar/pegar todas las vistas de una xib a otra o hay alguna forma de ampliarla con algunos cambios?

EDIT: He leído las siguientes preguntas y afirman que no es posible en este momento:

En caso de que sea imposible, lo que actitud se debe utilizar para hacer esto de manera efectiva?

Respuesta

0

Debe duplicar el archivo y realizar los cambios necesarios.

Gracias

+0

Mientras pensaba en su contexto OO, que estaba tratando de evitar la duplicación; – Ans

0

No hay nada XI ter el editor puede hacer que no se puede hacer mediante programación. La ruta más fácil es (típicamente) mover todo al código y luego eliminar el XIB de todos los objetivos/proyectos. Entonces puedes subclase como quieras.

Como extra, esto realmente puede simplificar la administración de recursos para sus objetivos múltiples.

Una alternativa para moverlo al código es simplemente mover las partes modificables a otras instancias (sostenidas/referenciadas por la celda). El controlador podría establecer este atributo antes de la presentación. Entonces, si la estilización y el dibujo en algún aspecto son especiales o personalizables, simplemente mueva esa lógica a una jerarquía de clases que no dependa de la deserialización de XIB y luego haga esas partes propiedades de la celda que ha definido en el plumín.

0

Si está buscando alguna otra solución para su problema, le sugiero que cree una celda personalizada mediante programación.

Te estoy explicando paso a paso, esto te ayudará a mejorar.

Para eso crea una clase que hereda de UITableViewCell y agrega los componentes que necesitas en tu tabelCell.

por lo que su archivo .h se ve así.

// -------- ------- >> START

#import <UIKit/UIKit.h> 

@interface CustomCell : UITableViewCell{ 

UIButton *btn1; 
UIButton *btn2; 
UIButton *btn3; 

} 

@property(nonatomic , retain) UIButton *btn1; 
@property(nonatomic , retain) UIButton *btn2; 
@property(nonatomic , retain) UIButton *btn3; 

@end 

// ------- ------- FIN < <

y su.m archivo se verá así

// -------- ------- >> START

#import "CustomCell.h" 

    @implementation CustomCell 
    @synthesize btn1, btn2, btn3; 

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    { 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 

    //----frame the components as per your project req.----  

    btn1 = [[UIButton alloc] initWithFrame:CGRectMake(1, 1, 85, 70)]; 
    [self.contentView addSubview:btn1]; 

    btn2 = [[UIButton alloc] initWithFrame:CGRectMake(100, 1, 85, 70)]; 
    [self.contentView addSubview:btn2]; 

    btn3 = [[UIButton alloc] initWithFrame:CGRectMake(195,1, 85, 70)]; 
    [self.contentView addSubview:btn3]; 
    } 
    return self; 
    } 

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated 
    { 
    [super setSelected:selected animated:animated]; 

     // Configure the view for the selected state 
    } 

// -------- finales ------ < <

Ahora está listo para reutilizar esta celda personalizada en sus otras clases. y también puede modificarlos según el requisito.

Ahora en cellForRowAtIndexPath >>

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 

static NSString *CellIdentifier = @"Cell"; 

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


if (cell == nil) 
{ 
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ; 
} 

    [cell.btN1 setImage:[UIImage imageNamed:@"YOUR IMAGE NAME"] forState:UIControlStateNormal]; // YOU CAN MAKE CHANGES HERE. 

    ................// remaining logic goes here 

return cell; 

} 

espero que esto le ayudará.

1 .Also take a look on link tutorial.

2. A Closer Look at Table View Cells

+0

Creo que no leyó mi pregunta; Ya he heredado una célula personalizada de la clase UITableViewCell; Sé cómo hacer celdas personalizadas para tableView; Necesito un nivel más de herencia, no directamente desde UITableViewCell, sino desde mi propia clase de celda personalizada, y lo más importante es reutilizar la vista de archivo xib; – Ans

0

has necesitado simplemente subclases de la clase de vista de celda personalizado? De esta forma, puede tener IBOutlets en la clase base para todos los componentes de la interfaz de usuario y en la nueva subclase puede administrarlos como desee según el nuevo comportamiento. Sería igual que la subclasificación de un UIView o una UIViewController etc.

0

que me pasó una vez y lo que hice es:

En lugar de subclases Hice una separada UIView tener mesa con customCell y añadió que vista como subvista donde sea necesario Pude cambiar la interfaz de usuario de customCell con una clave en customCell para saber qué UIViewController lo está agregando como subvista.

no estoy seguro de lo bueno que este enfoque es, pero aún así es una manera :)

Cuestiones relacionadas