アーロンヒレガスのMacOSX用Cocoaプログラミングの第9章、「挿入時に編集を開始する」のセクションで、彼はまさにそれを行う方法を説明しています。しかし、私を混乱させたのは、彼が他のことをたくさんしたことでした。完全なコードリストは次のとおりです。
- (IBAction)createEmployee:(id)sender
{
NSWindow *w = [tableView window];
// Try to end any editing that is taking place
BOOL editingEnded = [w makeFirstResponder:w];
if (!editingEnded) {
NSLog(@"Unable to end editing");
return;
}
NSUndoManager *undo = [self undoManager];
// Has an edit occurred already in this event?
if ([undo groupingLevel]) {
// Close the last group
[undo endUndoGrouping];
// Open a new group
[undo beginUndoGrouping];
}
// Create the object
Person *p = [employeeController newObject];
// Add it to the content array of 'employeeController'
[employeeController addObject:p];
[p release];
// Re-sort (in case the user has sorted a column)
[employeeController rearrangeObjects];
// Get the sorted array
NSArray *a = [employeeController arrangedObjects];
// Find the object just added
int row = [a indexOfObjectIdenticalTo:p];
NSLog(@"starting edit of %@ in row %d", p, row);
// Begin the edit in the first column
[tableView editColumn:0
row:row
withEvent:nil
select:YES];
}
これに関して2つの質問があります。
1)あなたはあなたがそれらすべてのことをすることになっていることをどうやって知っていますか?Appleのドキュメントに「チェックリスト」などはありますか?経験?
2)それでもすべてのメソッドを自分で書き直す必要がある場合、これはアレイコントローラーの目的全体を無効にしませんか?
編集:私は主に彼がこれらの行を入れることをどのように知っていたのか疑問に思っています:(他のすべてはかなり基本的で明白なので)
NSWindow *w = [tableView window];
// Try to end any editing that is taking place
BOOL editingEnded = [w makeFirstResponder:w];
if (!editingEnded) {
NSLog(@"Unable to end editing");
return;
}
NSUndoManager *undo = [self undoManager];
// Has an edit occurred already in this event?
if ([undo groupingLevel]) {
// Close the last group
[undo endUndoGrouping];
// Open a new group
[undo beginUndoGrouping];
}