Ich habe derzeit eine Tabellenansicht, mit Zellenansichten, die NSTextFields in ihnen haben. Derzeit auf Zeilenauswahl, ich schicke die Zelle die folgende Meldung mit der Hoffnung auf die Gewährung der NSTextView in der Zelle Ansicht ersten Responder-Status anzuzeigen:Gib NSTextField Fokus -?
- (void)notifyOfSelectionInWindow:(NSWindow *)window {
[[self textField] setEditable:YES];
[[self textField] setSelectable:YES];
// make textField (textView) first responder
[[self textField] selectText:nil];
[[[self textField] currentEditor] setSelectedRange:NSMakeRange([[[self textField] stringValue] length], 0)];
}
Weil ich will nicht die NSTextFields editierbar sein wenn die Zeile sie in nicht ausgewählt ist, kann ich dies auch in meiner benutzerdefinierten NSTextField Unterklasse:
- (void)textDidEndEditing:(NSNotification *)notification {
[self setEditable:NO];
[self setSelectable:NO];
[super textDidEndEditing:notification];
}
Update-Code Auswahl: (beachten sie, dass ich wechselnde Zeilenhöhen auch hier)
- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row {
// get the table veiw to animate/recalculate height of row
NSMutableIndexSet *changedRows = [NSMutableIndexSet indexSet];
[changedRows addIndex:row];
[changedRows addIndex:[tableView selectedRow]];
[tableView noteHeightOfRowsWithIndexesChanged:changedRows];
[rowView notifyOfSelectionInWindow:[self window]];
//^this in turn calls a method of the same name of the corresponding cell view
return YES;
}
Problem ist, das funktioniert nur halb der Zeit. Wenn ich zum ersten Mal eine Zeile auswähle, kehrt der First-Responder-Status zur Tabellenansicht zurück. Das zweite Mal funktioniert es perfekt und das Textfeld hat den Fokus. Beim dritten Mal bricht es wieder. Der vierte - es ist perfekt! Aus irgendeinem seltsamen Grund funktioniert der Code nur jedes andere Mal ...
Jeder hat eine Idee, warum das so ist? Jede aufschlussreiche Rückmeldung wird sehr geschätzt.