2012-06-27 10 views
8

Mam NSDictionary, który przechowuje wszystkie dane:Problem z pole wyboru w miłym viewbased NSTableView

  • jeden tytuł (nie ważne na to pytanie)
  • jeden link (nie ważne na to pytanie)
  • Jedna tablica NSDictionary zawierający tytuł i ponownie 1 1 Link

ja wyświetlania tych danych w widoku na podstawie tabeli widok jak to:

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

Chcę 2 kolumny w tym tableView, jeden, aby wyświetlić tytuł i jeden z polem wyboru, który mógłby zrobić coś informując mnie, który wiersz jest sprawdzany.

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

Teraz kiedy go uruchomić, a następnie kliknij pole wyboru nie robi nic (oczywiście, bo nie wiem jak to zrobić coś zrobić. Gdzie należy umieścić kod, który powinien coś zrobić?

głównym celem jest edytowalna lista pobrań, prawda jest teraz wyświetlana jest lista, z wyboru obok tytułu na siebie linii. Chciałbym wiedzieć, które pole wyboru są sprawdzane, a które nie.

Próbowałem tego:

Ale nie mogę dowiedzieć się, jak uzyskać wiersz tego przycisku, aby wiedzieć, który tytuł jest związany z tym checkBox.

Próbowałem również setObjectValue metody tableView bez powodzenia.

Sposób chciałbym go do pracy wynosi:

Mam „Rozpocznij pobieranie” przycisk, który sprawdzić, czy każdy pole jest zaznaczone, czy nie i rozpocząć kolejną akcję (pobieranie) tylko ze sprawdzonej rzędu.

Chciałbym uniknąć wiązań, ponieważ mam zamiar również działać na iOS i nie chcę mieć innego kodu dla iOS.

Odpowiedz

1

Możesz spróbować użyć przycisku 'znacznik' ustawiając go dla każdego przycisku umieszczonego jako numer (lokalizacja) w widoku tabeli. Popatrz tutaj!!!

Detecting which UIButton was pressed in a UITableView

[Edit1]

Jeśli ludzie rzeczywiście postanowił przeczytać powiązany słupek byś sobie sprawę, że odpowiedź jest rzeczywiście istnieje.

spróbuj dodać:

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

wewnątrz indziej swojej rutyny viewForTableColumn:

W rutynowych checkBoxAction:

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

Myślę też, że raz zaczniesz kopać głębiej w kodzie , będziesz chciał zacząć korzystać z możliwości automatycznego odszukania obiektów TableViewCell. Wierzę, że znajdziesz się w problemie alokacji/dealokacji pamięci.

+0

mi się nie neguje:/Im faktycznie czyta posta po prostu umieszczonego – ItsASecret

+0

powinieneś być w stanie dokonać prostych zmian Włożyłem w moim poście, nie koniecznie mówi na ciebie za Nega tację. Nadal będziesz musiał przemyśleć dequeing !!! – trumpetlicks

+0

Tutaj jest również WIELKIE łącze na niestandardowym rysunku UITableView, mówi również do rzeczy deque !!! http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html – trumpetlicks

3

Można użyć metody -rowForView:NSTableView uzyskać wiersz dany pogląd jest w

W twoim przypadku trzeba było coś takiego:.

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

Oto docs dla NSTableView: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html

+0

Nie mogę tego przetestować, ponieważ nie pracuję nad tym, ale dzięki! – ItsASecret