2012-06-27 6 views
8

Ich habe eine NSDictionary, die die Daten alle gelten:Ausgabe mit einem checkBox in einem viewbased NSTableView

  • Einen Titel (nicht wichtig für diese Frage)
  • Einen Link (nicht wichtig für diese Frage)
  • eine Reihe von NSDictionary wieder 1 Titel und 1 Link

ich Darstellung dieser Daten in einer Ansicht auf Basis der Tabellenansicht wie folgt enthält:

- (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]; 
    } 
} 

Ich möchte 2 Spalten in diesem tableView, eins zum Anzeigen des Titels und eins mit einem Kontrollkästchen, das würde etwas tun lassen mich wissen, welche Zeile überprüft wird.

- (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; 
     } 
    } 
} 

Gerade jetzt, wenn ich es starten, und klicken Sie auf die Checkbox es tut nichts (natürlich, weil ich weiß nicht, wie es etwas tun zu machen. Wo soll ich den Code setzen, die etwas tun sollte?

das Hauptziel ist eine editierbare Liste der Downloads, gerade jetzt die Liste angezeigt wird, mit der Checkbox rechts neben dem Titel an jeder Zeile. ich würde gerne wissen, welche checkBox geprüft und welche nicht.

Ich habe dies versucht:

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

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

Aber ich kann nicht herausfinden, wie man die Reihe dieser Taste erhält, um zu wissen, welcher Titel mit dieser CheckBox verbunden ist.

Ich versuchte auch die setObjectValue Methode der tableView ohne Erfolg.

Die Art und Weise Ich mag es wäre zu arbeiten:

Ich habe einen Check „starten Sie den Download“ Button, wenn jedes Kontrollkästchen aktiviert ist oder nicht, und starten Sie die nächste Aktion (Download) nur mit der überprüften Reihe.

Ich möchte Bindings vermeiden, weil ich plane, es auch auf iOS arbeiten zu lassen, und ich möchte keinen anderen Code für iOS haben.

Antwort

1

Sie können versuchen, die Schaltfläche 'Tag-Eigenschaft für jede Schaltfläche, die Sie als die Nummer (Ort) in der Tabellenansicht platzieren festlegen. Schau hier!!!

Detecting which UIButton was pressed in a UITableView

[EDIT1]

Wenn die Menschen tatsächlich den verlinkten Beitrag lesen entschieden Sie würden erkennen, dass die Antwort tatsächlich da ist.

Versuche Zugabe:

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

innerhalb der sonst Ihrer viewForTableColumn Routine:

In Ihrer checkBoxAction Routine:

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

Ich denke auch, dass, sobald Sie anfangen, weiter in den Code zu graben , werden Sie die automatische Auslagerungsfunktion der TableViewCell-Objekte verwenden wollen. Ich glaube, dass Sie sich in einem Speicherallok/Dealloc-Problem finden werden.

+0

Ich negierte nicht:/Ich lese tatsächlich die Post, die Sie gerade verbunden – ItsASecret

+0

Sie SOLLTE in der Lage sein, die einfachen Änderungen zu machen, die ich in meine Post gesetzt habe, sprach nicht notwendigerweise für die Nega tion. Sie müssen immer noch die Entkalkulation durchdenken !!! – trumpetlicks

+0

Hier ist auch ein großer Link auf benutzerdefinierte UITableView Zeichnung, spricht mit den Deque Sachen auch !!! http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html – trumpetlicks

3

Sie können die NSTableView Methode -rowForView: die Zeile eine bestimmte Ansicht in bekommen

In Ihrem Fall, dass Sie etwas davon haben würden.

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

Hier sind die Docs für NSTableView: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html

+0

Ich kann es nicht wirklich testen, da ich nicht mehr an diesem arbeite, aber danke trotzdem! – ItsASecret

Verwandte Themen