2011-08-03 8 views
1

編集可能なフィールドの1つの列を持つNSTableViewがあります。セルの編集はうまくいき、デリゲートのルーチンが更新を取得し、必要に応じてそれらを処理することができます。問題は、タイマーまたは非同期(ソケット)入力に基づいてテーブルの値を更新する他のコードがあることです。編集中に更新イベントが発生すると、更新プログラムはユーザー入力を上書きします。編集中にNSTableViewへの更新を防止する

私は、インスタンス変数のロックと更新をブロックするデリゲートメソッドを使用しようとしている:

- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor; 
{ 
    tableEditInProgress = YES; 
    return YES; 
} 

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor 
{ 
    tableEditInProgress = NO; 
    return YES; 
} 

- (void)controlTextDidBeginEditing:(NSNotification *)aNotification 
{ 
    tableEditInProgress = YES; 
} 

- (void)controlTextDidEndEditing:(NSNotification *)aNotification 
{ 
    tableEditInProgress = NO; 
} 

これが唯一の更新が発生する前にユーザーならば、フィールドでの実際の型の新しいテキストを動作するようです。ユーザーがフィールド内の編集カーソルを取得するとすぐに更新をブロックしたい(フィールドの内容をダブルクリックする)。

おそらく間違ったデリゲートメソッドを使用しています。

TIA

ジョー

答えて

0

は、すべてこのようなものを捨ててみて、代わりにこれを試してみてください。

あなたはテーブルが現在編集されているかどうかを確認したい場合は、これが非nilであれば、[tableView currentEditor];を呼び出します、テーブルビューが編集中です。それが無ければ編集されていません。つまり:だから

BOOL tableEditInProgress = ([tableView currentEditor] != nil); 
+0

、代わりに '場合(tableEditInProgress)リターンの;'、 'ない場合([sensorTable currentEditor] = nilを!)\tリターン;'代わりに? – Flyingdiver

+0

それはそれをやっているようでした、ありがとう! – Flyingdiver

+0

ええ、そうです。それは本当にうまくいくはずです。 – Enchilada

関連する問題