4

私はデリゲートメソッドをViewController実装しています。テストすると、すべてが期待どおりに機能します。ただし、アプリがバックグラウンドに置かれ、その後再びアクティブになった場合、の選択を変更するときにデリゲートメソッドは呼び出されません。この問題を抱えている人は他にいますか?UITextViewtextViewDidChangeSelectionTextView

私のUITextViewサブクラスはこれを行います:

self.inputView = [[UIView alloc] initWithFrame:CGRectZero];

上記は、キーボードが表示されないようにすると同時に、TextViewを有効にしたままにするためのものです。

サブクラスもこれを行います:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
{
    if ( [UIMenuController sharedMenuController] )
    {
        [UIMenuController sharedMenuController].menuVisible = NO;
    }
    return NO;
}

これは、UITextViewをクリックしたときにコピーペーストのポップアップが表示されないようにするためです。この方法は少し奇妙に見えると思いますが、少し前にSOで見つけたので、本来あるべきことを実行しました。

4

2 に答える 2

1

アプリがバックグラウンドから戻ると、UITextViewデリゲート メソッドtextViewDidChangeSelection: 再び起動します。したがって、アプリで何か他のことが起こっているに違いありません。

2 つのコントロールを持つ単純なアプリを作成したことを確認するためにUITextView、それらのデリゲートをビュー コントローラーに設定し、次のコードを追加しました。

- (void) textViewDidChangeSelection:(UITextView *)textView
{
    NSLog(@"Fire change selection.");
}

アプリをバックグラウンド化する前とバックグラウンド化から戻った後の両方で正常に動作します。

于 2013-03-10T16:23:45.120 に答える
1

私にとって問題を解決したのは、電話することでした

[myTextView reloadInputViews]

AppDelegate メソッドで:

-(void)applicationWillEnterForeground:

なぜそれが機能するのか正確にはわからないので、誰かが何か良い説明があれば、それは非常にありがたいです.

于 2013-03-11T21:05:37.733 に答える