2012-06-27 25 views
8

tengo una NSDictionary que contiene todos los datos:Problema con una casilla de verificación en un viewbased NSTableView

  • un título (no es importante para esta pregunta)
  • Un enlace (no es importante para esta pregunta)
  • una serie de NSDictionary que contiene 1 nuevo título y 1 enlace

estoy mostrando estos datos en una vista basada vista de tabla como esta:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tv 
{ 
    if (tv == _downloadTable) 
    //I use this "if" because I have another tableView that has nothing to do 
    //with this one 
    { 
     return [[myDictionary objectForKey:@"myArray"] count]; 
    } 
} 

Quiero 2 columnas en este tableView, una para mostrar el título y otra con una casilla de verificación, que haría algo para saber qué fila está marcada.

- (NSView *)tableView:(NSTableView *)tv viewForTableColumn :(NSTableColumn *)tableColumn row :(NSInteger)row 
{ 
    if (tv == _downloadTable) 
    { 
     if (tableColumn == _downloadTableTitleColumn) 
     { 
      if ([[[myDictionary   objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"]) 
      { 
      NSString *title = [[[myDictionary objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"]; 
      NSTableCellView *result = [tv makeViewWithIdentifier:tableColumn.identifier owner:self]; 
      result.textField.stringValue = title; 
      return result; 
      } 
     } 
     if (tableColumn == _downloadTableCheckColumn) 
     { 
      NSLog(@"CheckBox"); //I wanted to see exactly when that was called 
           //But it didn't help me :(
      NSButton *button = [[NSButton alloc]init]; 
      [button setButtonType:NSSwitchButton]; 
      [button setTitle:@""]; 
      return button; 
     } 
    } 
} 

este momento cuando lo ejecuto y haga clic en la casilla de verificación no hace nada (por supuesto, porque no sé cómo hacer que haga algo. ¿Dónde debo poner el código que se debe hacer algo?

el objetivo principal es una lista editable de descargas, en este momento se muestra la lista, con la casilla de verificación junto al título en cada línea. me gustaría saber qué checkBox se comprueban y cuáles no.

Intenté esto:

[button setAction:@selector(checkBoxAction:)]; 

- (void)checkBoxAction: (id)sender 
{ 
    NSLog(@"I am button : %@ and my state is %ld", sender, (long)[sender state]); 
} 

Pero no puedo averiguar cómo obtener la fila de ese botón, para saber qué título está asociado con este checkbox.

También probé el método setObjectValue del tableView sin éxito.

La forma me gustaría que funcione es:

tengo un botón "iniciar la descarga" que compruebe si cada casilla está marcada o no y lanzar la siguiente acción (descarga) sólo con la fila marcada.

Me gustaría evitar las encuadernaciones porque planeo hacer que funcione también en iOS y no quiero tener un código diferente para iOS.

Respuesta

1

Puede intentar usar la propiedad de la etiqueta del botón 'configurándola para cada botón que coloque como el número (ubicación) en la vista de tabla. ¡¡¡Mira aquí!!!

Detecting which UIButton was pressed in a UITableView

[EDIT1]

Si la gente realmente decidieron leer el post relacionado se darían cuenta de que la respuesta es realmente allí.

Trate de añadir:

[button setTag:row]; 
[button addTarget:self action:@selector(checkBoxAction:) forControlEvents:UIControlEventTouchUpInside]; 

el interior de la persona de su rutina viewForTableColumn:

En su rutina checkBoxAction:

- (void)checkBoxAction: (id)sender{ 
    NSLog(@"I am button : %@ and my state is %@", sender.tag, [sender state]); 
} 

también creo que una vez que comience a cavar más lejos en su código , va a querer comenzar a utilizar la capacidad de autoquequeado de los objetos TableViewCell. Creo que te encontrarás en un problema de memoria alloc/dealloc.

+0

No he negado:/De hecho, estoy leyendo la publicación que acaba de vincular – ItsASecret

+0

DEBE poder hacer las ediciones simples que he puesto en mi publicación, no necesariamente estaba hablando para la nega ción. ¡¡¡Aún necesitarás pensar en el dequeing !!! – trumpetlicks

+0

¡Aquí también hay un GRAN enlace en el dibujo personalizado de UITableView, también habla de las cosas deque! http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html – trumpetlicks

3

Puede utilizar el método NSTableView-rowForView: para obtener la fila una visión particular está en

En su caso usted tendría algo como esto:.

- (void)checkBoxAction:(id)sender 
{ 
    NSInteger row = [_downloadTable rowForView:sender]; 
    NSLog(@"The button at row %ld was clicked.", row); 
} 

Éstos son los documentos para NSTableView: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html

+0

Realmente no puedo probarlo ya que no estoy trabajando en este, pero gracias de todos modos! – ItsASecret

Cuestiones relacionadas