CoreDataを使用していくつかのNSTableViewを制御するアプリケーションを作成しています。NSTableViewに新しいレコードを作成する追加ボタンがあります。このボタンをクリックしたときにフォーカスを新しいレコードに移動して、すぐに名前を入力できるようにするにはどうすればよいですか?これは、プレイリストの追加ボタンをクリックした直後にキーボードのフォーカスが新しい行に移動してプレイリストの名前を入力できるiTunesの場合と同じ考え方です。
3806 次
3 に答える
19
まず第一に、まだ取得していない場合は、アプリケーションのコントローラー クラスを作成する必要があります。NSArrayController
オブジェクトが格納されている のアウトレットと、NSTableView
オブジェクトを表示する のアウトレットを、コントローラー クラスのインターフェイスに追加します。
IBOutlet NSArrayController *arrayController;
IBOutlet NSTableView *tableView;
これらのコンセントをIBのNSArrayController
および に接続します。次に、「追加」ボタンが押されたときに呼び出されるメソッドNSTableView
を作成する必要があります。IBAction
それを呼び出すaddButtonPressed:
か、同様のものを呼び出して、コントローラー クラス インターフェイスで宣言します。
- (IBAction)addButtonPressed:(id)sender;
また、IBの「追加」ボタンのターゲットにします。
次に、コントローラ クラスの実装でこのアクションを実装する必要があります。このコードは、配列コントローラーに追加したオブジェクトがNSString
s であることを前提としています。new
そうでない場合は、変数の型を追加するオブジェクト型に置き換えます。
//Code is an adaptation of an excerpt from "Cocoa Programming for
//Mac OS X" by Aaron Hillegass
- (IBAction)addButtonPressed:(id)sender
{
//Try to end any editing that is taking place in the table view
NSWindow *w = [tableView window];
BOOL endEdit = [w makeFirstResponder:w];
if(!endEdit)
return;
//Create a new object to add to your NSTableView; replace NSString with
//whatever type the objects in your array controller are
NSString *new = [arrayController newObject];
//Add the object to your array controller
[arrayController addObject:new];
[new release];
//Rearrange the objects if there is a sort on any of the columns
[arrayController rearrangeObjects];
//Retrieve an array of the objects in your array controller and calculate
//which row your new object is in
NSArray *array = [arrayController arrangedObjects];
NSUInteger row = [array indexOfObjectIdenticalTo:new];
//Begin editing of the cell containing the new object
[tableView editColumn:0 row:row withEvent:nil select:YES];
}
これは、[追加] ボタンをクリックすると呼び出され、新しい行の最初の列のセルの編集が開始されます。
于 2009-05-10T10:08:33.480 に答える