0

通常の場合、この画像のように、ファーストレスポンダとなる NSTextField オブジェクトの外側に青色の長方形が表示されます:
通常の場合のリンク

ただし、外側に青い境界線がない NSTextField を取得しました。何故ですか? 1> 典型的な MAC OS アプリを作成します

。 2> 対応するビューのaddSubview:およびremoveFromSuperviewメソッドを呼び出して、アプリのサブビューを切り替えます。 3> 1 つのサブビュー (実際には上記の画像) で、[次へ] ボタンをクリックします。そのアクションは次のようなものです (サブビューのコントローラー .m ファイルで定義されています)。


- (IBAction)actionNextClicked:(id)sender{
//_hdlThreadNext is a NSThread object
    [[_hdlThreadNext alloc] initWithTarget:self selector@selector(threadNext:) object:nil];
    [_hdlThreadNext start];
}

そして、スレッドは次のようになります。

- (void)threadNext:(id)sender{
    @autoreleasepool{
         BOOL success;

         [CATransation begin];

         /* send username and password and decrypt responce */
         ... // balabala... and set "success"

         if (success){
             [[self view] removeFromSuperview];
             [self sendMessageToSuperview:@"Add Next View"];    // Superview's method, telling superview to call addSubview: to add another subview
         }
         else{
             /* Nothing special to do */
         }

         [CATransation commit];
    }
}

4>サブビューが別のものに切り替わります。そのコンボ ビューは問題ないように見えました:コンボ ビューの画像
しかし、もう 1 つの NSTextView の青い境界線はもう表示されません。

私が何をしたのか知っている人はいますか?どうもありがとうございました!

4

1 に答える 1

0

おそらく私は完全に間違ったプログラミングを行ったので、この問題に遭遇した人はほとんどいませんでした.
この問題を解決する方法を見つけました。すべて (またはほとんど?) のグラフィックの変更は、ブログのメイン スレッドで行う必要があると述べました。したがって、「if(success)」を次のように変更します。

if(success){
    dispatch_async(dispatch_get_main_queue()' ^{
        [[self view] removeFromSuperview];
        [self sendMessageToSuperview:@"Add Next View"];
    });
}

解決、フォーカスリングが戻ってきました。

于 2013-03-08T08:37:31.083 に答える