私は現在、内部に NSTextFields を持つセルビューを含むテーブルビューを持っています。現在、行選択時に、セル ビューのファーストレスポンダー ステータスで NSTextView を許可することを期待して、セル ビューに次のメッセージを送信しています。
- (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)];
}
行が選択されていないときに NSTextFields を編集可能にしたくないので、カスタム 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番目 - 完璧です!奇妙な理由で、コードは1回おきにしか機能しません...
なぜこれがそうなのか、誰にも分かりますか?啓発的なフィードバックは大歓迎です。