2012-05-29 19 views

Respuesta

5

Simplemente arrastre un UISwitch a la celda que ha dispuesto. A continuación, puede utilizar el editor asistente (que es impresionante) para conectarlo a la clase principal. Un consejo que te daré, si estás planeando varias celdas que serán similares en apariencia, crea la primera en la sección y dispárala exactamente, luego puedes aumentar el número de filas en esa sección e IB creará copias de la fila existente para ti.

+0

+1 tv estática lo hacen tan fácil como un pastel. :) – lnafziger

+7

tenga en cuenta que para arrastrar un elemento UISwitch en el UITableViewCell estático mientras se hace un guion gráfico, la celda debe tener el estilo "Personalizado" – Archie1986

+0

@ Archie1986 También funciona para celdas "Básicas", aunque con alguna coacción. –

0

Lo haces exactamente de la misma forma que lo haces en la pregunta a la que te vinculaste. No existe una tabla "dinámica". La tabla solo muestra tu modelo. Su modelo puede ser dinámico, pero la vista de tabla no lo es. De cualquier manera, siga la respuesta a esa pregunta y tendrá un cambio en su vista de tabla.

+0

Esto no es correcto. A partir de iOS 5, hay tablas de celda estáticas que no necesitan ninguna fuente de datos, por el contrario, las células de Prototipo Dinámico necesitan una fuente de datos de algún tipo. –

+0

Bastante justo. No estaba enterado de eso. Después de leer los documentos, parece más fácil usar cellForRowAtIndexPath. – sosborn

+2

Ver el enlace de video en mi respuesta editada, creo que va a cambiar de opinión sobre lo fácil que es agregar objetos a un SC TV –

2

Creo una función para este caso y funciona bien para mí ... pruébalo, primero en la creación de celdas puedes verificar la fila en la que quieres agregar un UISwitch, por ej.

if(indexPath.row == 0) 
     [self createOnOffView:cell withTitle:@"Somthing" withTag:1001 defaultVal:YES]; 

Y la función es:

- (void) createOnOffView:(UITableViewCell*) cell withTitle:(NSString*) title withTag:(int)tag defaultVal:(BOOL) defaultVal 
{ 
    CGRect rect; 

    cell.textLabel.text = title; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    rect = cell.contentView.frame; 

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
     rect.origin.x = cell.frame.size.width - 20; 
    else 
     rect.origin.x = rect.size.width/2 +35; 

    rect.origin.y = rect.size.height/2 - 15;  
    rect.size.width = 60;  

    UISwitch *switchView = [[UISwitch alloc] initWithFrame:rect]; 
    [cell.contentView addSubview:switchView]; 
    [switchView addTarget:self action:@selector(didChangeSwitch:) forControlEvents:UIControlEventValueChanged]; 

    switchView.tag = tag; 

    [switchView setOn:defaultVal]; 

    [switchView release]; 
} 

Y cuando el valor es el interruptor es cambiar este método será despedido .. para que pueda saber qué interruptor basado en la etiqueta

- (void) didChangeSwitch:(UISwitch*)switchView 
{ 
    if(switchView.tag == 1001) 
    { 
     //Do Somthing 
    } 

    if(switchView.tag == 1002) 
    { 
     //Do Somthing 
    }  
} 

Espero que esto sea útil :)

+1

Esto no es tan fácil como simplemente arrastrar el interruptor a la celda que desea que esté utilizando Interface Builder. Eche un vistazo a cómo funcionan los tableivews de Static Cell. No es necesario ningún método de fuente de datos cuando se usan, simplemente se conectan las IBActions para los objetos como en un ViewController normal. –

15

Así es como funciona en Interface Builder. Sin necesidad de código

  • Arrastre un UISwitch en su Controlador de Vista. Necesita estar fuera de la vista principal . Un poco simplemente relajándome allí con algunas otras cosas.

  • Ctrl-Click en la celda de la vista de tabla que debe tener este interruptor, y arrastre al nuevo Switch. Ver 1. enter image description here

  • Conecte el interruptor a la vista de la tableta de la celda de la vista. Ver 2. enter image description here

Ejecutar la aplicación y ver el interruptor aparece en la tabla - hecho!

Nota: el interruptor extrañamente no aparece en el constructor Interfaz. Pero aparecerá cuando ejecute la aplicación

Si también desea conectarlo a una variable de instancia, por ejemplo para que pueda leer más tarde su propiedad "on", conéctela a una toma de corriente como lo haría con cualquier otra otra vista 3, 4.

enter image description here enter image description here

PS: Tenga en cuenta que UISwitch estado encendido/apagado se encuentra en su "sobre" la propiedad, no "seleccionado". Solo estoy agregando esto porque es un poco confuso.

PPS: Perdón por la foto de gran tamaño, estoy en una pantalla de retina.

+0

Esto parece prometedor ... pero después del 2do paso y en el 'Esto hará que el interruptor aparezca en la tabla ¡listo!' parte No veo el interruptor aparece en la tabla. Estoy bastante seguro de haber seguido los pasos correctamente cuando veo que aparecen las ventanas emergentes oscuras: accessViewView. ¿Cualquier pista? – Bruce

+0

Bueno, ejecute la aplicación, ¿ve el interruptor? Me di cuenta de que no aparece en Interface Builder. Pero estará en la celda cuando ejecutas la aplicación. Pruébalo. Una vez que funcione para ti, actualizaré la redacción allí arriba. – n13

+0

Tienes razón, aparece en el lugar correcto en el que quiero que esté. ¡Increíble! También estoy averiguando cómo enganchar el interruptor para ejecutar algún código cada vez que se voltea. ¿Alguna sugerencia? – Bruce

Cuestiones relacionadas