1

私は最初からiOSをプログラムしましたが、Cocoaは初めてなので、優しくしてください。

NSOutlineViewがあり、メインメニューから切り取り/コピー/貼り付けを実装して、選択した行を切り取り/コピー/貼り付けしました。

また、ユーザーがNSTextFieldCell内のテキストを選択してコピーし、カーソルを別のNSTextFieldCellに置いて、貼り付けることができるようにします。

次の場所にBOOLを設定することで、ユーザーがセル内で作業していることを発見できました。

- (BOOL)outlineView:(NSOutlineView *)anOutlineView shouldEditTableColumn:(NSTableColumn*)aTableColumn item:(id)anItem

編集終了の通知で設定を解除し、次のように設定します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editingDidEnd:)
                                                 name:NSControlTextDidEndEditingNotification object:nil];

これはうまくいくようです。

次に、切り取り、コピー、貼り付けのアクションで、BOOLをチェックして正しいことを行うことができます。ユーザーがセル内で作業していない場合は行全体をコピーし、ユーザーがセル内で作業している場合はテキストをコピーします。

ただし、ユーザーがセル内で作業しているときに必要なものを取得する方法がわかりません。

NSTextのcut:、copy:paste:メソッドを使用することを検討しました。これは、選択を処理する必要があるためです。しかし、NSTextオブジェクトはどこにもないと思います!

または、NSTextFieldCellから選択したテキストを読み取り、保存してから、貼り付けるセル内の挿入ポイントを見つけて貼り付ける必要があります。

それとも、私が見逃しているはるかに優れた組み込みサポートがありますか?

感謝の気持ちを込めて受け取った助けはあります-もちろん特定の解決策だけでなく、Cocoaでのテキスト/セル/フィールド処理に関する背景入門書へのリンクもあります。

4

1 に答える 1

2

いつものように、投稿した直後に解決策を見つけます!

答えは、フィールドエディタであるNSTextViewが、セルが編集されているときの最初のレスポンダーであるということです。そのスーパークラスであるNSTextは、cut:、copy:、paste:をサポートするものです。

したがって、カットコピーアンドペーストコマンドの「セル編集」バージョンは次のようになります。

-(void)pasteTextToCell:(id)sender {

    NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
    [fieldEditor paste:sender];
}

-(void)copyTextFromCell:(id)sender {

    NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
    [fieldEditor copy:sender];
}

-(void)deleteTextFromCell:(id)sender {

    NSTextView* fieldEditor = (NSTextView*)[[appDelegate mainWindow] firstResponder];
    [fieldEditor cut:sender];
}
于 2012-08-01T08:18:12.633 に答える