0

A) 最初に、目に見えない UILabel を使用せずにこれを解決しようとしている方法を公開します

1) UITextView を最初にタップすると、最初のレスポンダーになります。これはデフォルトの動作です (コードを追加する必要はありません) が、タップ認識エンジンは後で他のアクションをトリガーする必要があるため、パーソナライズされたタップ認識エンジンを作成する必要もあります。

  UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapRecognized:)];
  [singleTap setNumberOfTapsRequired:1];
  [TextView addGestureRecognizer:singleTap];
  [TextView setUserInteractionEnabled:YES];
  [singleTap release];

-(IBAction)singleTapRecognized:(id)sender
    {
      [TextView becomeFirstResponder];
    }

2) テキストを変更すると、メニュー バーが非表示になります。TextViewDidChange 内にコードを追加するだけでよいため、これは問題を引き起こしません。

- (void)textViewDidChange:(UITextView *)textView
{
  if (bTitleBar)
  {
    bTitleBar = NO;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.30f];
    menuBar.transform =
    CGAffineTransformMakeTranslation(
                                     menuBar.frame.origin.x,
                                     -50 
                                     );

    CGRect newFrameSize;
    currentOrientation = [UIApplication sharedApplication].statusBarOrientation;
    if (currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown)
    {
      newFrameSize = CGRectMake(96, 0, txtMain.frame.size.width, 605);
    }
    else
    {
      newFrameSize = CGRectMake(96, 0, txtMain.frame.size.width, 270);
    }
    textView.frame = newFrameSize;
    [UIView setAnimationDuration:0];
  }
}

3) 次に UITextView をタップすると (テキストが変更され、MenuBar が非表示になった後)、メニュー バーが再び表示されるようになります。その場合、再び表示されるように singleTapRecognized 内にコードを追加しますが、何らかの理由で UITapGestureRecognizer の singleTap が機能しなくなり、singleTapRecognized メソッドがトリガーされなくなります。だから私はBプランから始めました:

B) 私が試した解決策は、目に見えない UILabel を使用して、UITextView に (プログラムではなく) 視覚的にアタッチすることでした。また、対応する IBOutlet を作成し、参照を設定しました。UIGestureRecognizer singleTap が UITextView ではなく UILabel に追加されるようになりました。問題は、UILabel がオーバーして障害になるため、UITextView をスクロールまたはタップできないことです。

これを解決する方法のアイデアはありますか? AプランとBプラン、どちらを継続するのが良いでしょうか?

4

1 に答える 1

0

C案でいいと思います。テキストビューのgestureRecognizersプロパティをログに記録すると、たくさんあるので、いじるのは大変そうです。通常、テキスト ビューを 2 回タップすると、選択が変更され (または置換テキスト ポップオーバーが表示され)、textViewDidChangeSelection: メソッドが呼び出されます。このメソッドを使用して、メニュー バーが非表示になっているかどうかを確認します。つまり、それを元に戻し、スーパー textViewDidChangeSelection: を呼び出して、テキスト ビューがその機能を実行できるようにします。

于 2012-10-05T00:03:46.033 に答える