2015-10-26 7 views
10

Quando utilizzo una vista personalizzata come cella di un NSTableView basato su vista, la vista personalizzata è leggermente al di sotto della riga della tabella. Quando faccio clic su di esso, invece di modificare la vista personalizzata degli elementi (ad esempio il campo di testo), la riga della tabella è stata selezionata (ed evidenziata). Devo fare clic per selezionare il campo di testo.Come portare la cella di visualizzazione personalizzata sopra le righe della tabella in NSTableView?

- (NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    NSLog(@"We are creating views!"); 
    NSTableCellView *newView; 
    newView = [tableView makeViewWithIdentifier:@"PostCell" owner:self]; 


    NSTextField *newTextField = [[NSTextField alloc] init]; 
    [newView addSubview:newTextField]; 

    return newView; 
} 

highlights the front

Quando disattivo la selezione riga secondo NSTableView - Disable Row Selection, c'era alcuna selezione.

- (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView { 
    return NO; 
} 

Ma non riesco ancora a selezionare direttamente il campo di testo. Quel che è peggio, non riesco nemmeno a selezionarlo usando il mouse. Solo tab sulla tastiera funziona.

Unable to select

Ci sembrano essere qualcosa di sopra di esso. Ma è la "colonna della tabella" mostrata nel generatore di interfacce? O qualcos'altro?

Come posso risolvere questo?

+0

come si inizializza UITableViewCell? 'cell.contentView = customView'? in caso affermativo dovresti considerare di aggiungere la vista invece '[cell.contentView addSubview: customView]' – blld

+0

@ AurélienBouilland, trascina una vista personalizzata nel generatore di interfacce proprio sotto la colonna della tabella (come figlio di essa), imposta la classe sulla mia vista classe e 'NSTableCellView * newView; newView = [tableView makeViewWithIdentifier: @ "PostCell" proprietario: self]; '; – Colliot

+0

@ AurélienBouilland, per altri dettagli, fare riferimento a [La vista personalizzata creata con Interface Builder non viene visualizzata quando richiamata in altre viste] (http://stackoverflow.com/questions/33329280/custom-view-created-with-interface-builder -contravvenga-non-render-quando-chiamata-in-altro). – Colliot

risposta

4

Utilizzare una sottoclasse personalizzata di NSTableView e ignorare -validateProposedFirstResponder:forEvent: per restituire YES.

Vedere this blog entry dall'ingegnere Apple che ha scritto il codice di visualizzazione tabella basato su visualizzazione.

1

Assicurarsi che il seguente codice sia presente.

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex { 
return YES; 
} 

Si può provare a registrare le sottoview O è possibile controllare le visualizzazioni di vista. Questo aiuterà a capire la gerarchia delle viste.

Nota anche se una delle visualizzazioni dell'utente è disabilitata, la vista secondaria non sarà in grado di ricevere gli eventi. Verifica che tutte le visualizzazioni e le sottoview dell'utente userInteraction sia abilitata.

Spero che questo aiuti.

Problemi correlati