私は現在、それらの内部にNSTextFieldsを持つセルビューを持つテーブルビューを持っています。 現在、選択した行の上に、私は、細胞が細胞ビューファーストレスポンダの状態でNSTextViewを付与することを期待して、次のメッセージを表示送るよ:私はNSTextFieldsが編集可能になりたくないのでNSTextFieldにフォーカスを与える - ?
- (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)];
}
を彼らはしている行が選択されていない場合、私はまた私のカスタムNSTextFieldサブクラスでこれを実行します。
- (void)textDidEndEditing:(NSNotification *)notification {
[self setEditable:NO];
[self setSelectable:NO];
[super textDidEndEditing:notification];
}
選択更新コードを:
- (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;
}
(私もここに行の高さを変えてることに注意してください)
問題は、これは時間ののの半分だけの作品です。最初に行を選択しようとすると、最初のレスポンダのステータスがテーブルビューに戻ります。 2回目は完全に動作し、テキストフィールドにはフォーカスがあります。 3回目に、再び壊れます。 4番目は完璧です!いくつかの奇妙な理由のために、コードは他の時間にのみ動作します...
これはなぜそうですか?どんな啓発的なフィードバックも高く評価されます。