1

UIViewサブビューとしていくつかある(MyView)のサブクラスがありUITextFieldます。MyViewはUITextFieldDelegate、テキストフィールドがクリックされたときに通知を受けるためにプロトコルを実装します。これはうまく機能していました。UIView次に、アニメーションでこのコンテナ(およびそのすべての子)をフェードインおよびフェードアウトできるように、テキストフィールドを一種の「コンテナ」に配置する必要があります。そこで、UIView(MySubview)を作成し、それをMyViewのサブビューにして、その中にすべてのテキストフィールドを配置しました。アニメーションは正常に機能しますが、UITextFieldDelegateは呼び出されなくなります。これは、テキストフィールドがMyViewの直接の子ではなくなったためだと思います。これに対処する他の方法はありますか?

アップデート

私は自分のコードの小さなバージョンを作成しました。おそらくこれは問題を見つけるのに役立ちます。

@interface MyView : UIView <UITextFieldDelegate>


@implementation MyView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        // This is MySubview:
        UIView *tempLabelsContainer = [[UIView alloc] initWithFrame:self.bounds];
        [tempLabelsContainer setUserInteractionEnabled:YES];
        [self addSubview:tempLabelsContainer];
        self.labelsContainer = tempLabelsContainer;
        [tempLabelsContainer release];

        UITextField *aTextField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
        [aTextField setBackgroundColor:[UIColor clearColor]];
        [aTextField setText:@"Some text"];
        [aTextField setTag:1];
        [aTextField setDelegate:self];
        [self.labelsContainer addSubview:aTextField];
        [aTextField release];

        // More labels are being added
    }

    return self;
}

#pragma mark - UITextFieldDelegate methods

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    // This is not being called
    NSLog(@"TextField with the tag: %d should be edited", [textField tag]);    

    return NO;
}
4

2 に答える 2

4

それでは、あなたのコードを書いてみましたが、うまくいきました。変更を試みることができるいくつかの項目を次に示します。

  • textField を編集できない理由は、textFieldShouldBeginEditing メソッドに NO を返しているためです。これを YES に変更します。
  • (可能であれば) textField を指定したものより少し下に配置してみてください。また、20px は適切な textField には小さすぎるので、少なくとも 40px にしてください。電話でステータスバーがオンになっている場合、0,0 に配置された 20px の textField は完全に非表示になる可能性があります。
  • textField の borderStyle を設定します。私の知る限り、これは textField が表示され、うまく相互作用するために重要です。(例: textField.borderStyle = UITextBorderStyleRoundRect)

成功を祈っている!:)

于 2011-09-07T15:06:48.140 に答える
0

誰かがこれと同じ問題を抱えている場合に備えて、私は自分の質問に答えます-誰かがそのようなばかげた間違いをしているとは想像しがたいですが:

ラベルコンテナのフレームをself.boundsに設定していました。しかし、MyViewControllerはCGRectZeroのフレームでMyViewを作成していました!コンテナを追加すると同時に、アニメーションをサポートするためにその変更を行いました。したがって、問題はビュー階層に関係していると思いました。恥ずかしい!!!

とにかく、すべてのヘルパー、特に彼の答えで私を別の方向に見させてくれたMadhumalGunetilekeに感謝します。

于 2011-09-08T05:38:38.760 に答える