1

UITextFieldInterface Builder でを設定し、それをプロパティに接続しましたself.nameField。私の問題は、そのままではタップしても何も起こらないことです。ユーザーはテキストを入力できません。カーソルすらありません。追加するbecomeFirstResponderと、キーボードが自動的に表示されます。私が望むのは、ユーザーがフィールドをタップしてテキストを入力した場合にのみ、キーボードが表示されるようにすることです。

関係する方法は次のとおりです。

-(void)displayOptOutScreen
{
    if (!self.nameField)
    {
        self.nameField=[[UITextField alloc] init];
    }
    self.nameField.hidden=NO;
    self.nameField.delegate = self;
    self.nameField.returnKeyType = UIReturnKeyDone;
    [self textFieldShouldReturn:self.nameField];
    [self.textView resignFirstResponder]; //This is a UITextView, created programmatically
    //[self.nameField becomeFirstResponder];  //Keyboard automatically displays.
}

価値があるのは、UIButtonタッチを受け入れないものもあります. はUITextView問題なくテキストを受け入れています。

これはタブ付きアプリケーションです。他のスタック オーバーフローの質問を読んだ後、次の行のさまざまな組み合わせをアプリ デリゲートに追加してみました。

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[GHHaikuViewController alloc] initWithNibName:@"GHHaikuViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

しかし、どの行を含めるか含めないかによってさまざまなエラーが発生し、何も機能しません。(View ControllerUITextFieldがオンになっているのは but ではありませんGHHaikuViewControllerGHComposeViewController、代わりにそれを使用しようとするとエラーが発生します。)

私が間違っていることについて何か考えはありますか?

編集: これは Interface Builder 設定のスクリーン ショットです。申し訳ありませんが、それらは壊れています-私はMacBook Air 11インチで作業しています.

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

さらに編集:po [[[[UIApplication sharedApplication] delegate] window] recursiveDescription]デバッグプロンプトで入力した ときの出力は次のとおりです。

(id) $1 = 0x0ad4bb80 <UIWindow: 0xad48ac0; frame = (0 0; 320 480); autoresize = W+H; layer = <UIWindowLayer: 0xad44010>>
   | <UILayoutContainerView: 0x9e74450; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x9e74510>>
   |    | <UITransitionView: 0xaa46f80; frame = (0 0; 320 431); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0xaa47050>>
   |    |    | <UIViewControllerWrapperView: 0x9e90760; frame = (0 20; 320 411); autoresize = W+H; layer = <CALayer: 0x9e907c0>>
   |    |    |    | <UIView: 0x9e8c870; frame = (0 0; 320 411); autoresize = W+H; gestureRecognizers = <NSArray: 0x9e8bbd0>; layer = <CALayer: 0x9e8c8d0>>
   |    |    |    |    | <UIImageView: 0x9e8c790; frame = (0 0; 320 411); clipsToBounds = YES; opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x9e8c7f0>>
   |    |    |    |    | <UITextField: 0x9e82610; frame = (40 189; 240 30); text = ''; clipsToBounds = YES; opaque = NO; autoresize = TM+BM; gestureRecognizers = <NSArray: 0x9e6ea90>; layer = <CALayer: 0x9e83720>>
   |    |    |    |    |    | <UITextFieldRoundedRectBackgroundView: 0x9e73ac0; frame = (0 0; 240 30); userInteractionEnabled = NO; layer = <CALayer: 0x9e73b80>>
   |    |    |    |    |    |    | <UIImageView: 0x9e73cd0; frame = (0 0; 8 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9e73d30>>
   |    |    |    |    |    |    | <UIImageView: 0x9e73d80; frame = (8 0; 224 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9e73de0>>
   |    |    |    |    |    |    | <UIImageView: 0x9e73e10; frame = (232 0; 8 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9e73e70>>
   |    |    |    |    |    | <UITextFieldLabel: 0x9e8afa0; frame = (7 7; 226 15); text = 'Name (optional)'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9e8af20>>
   |    |    |    |    | <UIButton: 0xad6fb00; frame = (236 221; 44 44); clipsToBounds = YES; opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xad6fbf0>>
   |    |    |    |    |    | <UIImageView: 0x9e921c0; frame = (14 14; 16 16); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9e922d0>>
   |    |    |    |    |    | <UIButtonLabel: 0x9e8a6f0; frame = (0 0; 0 0); clipsToBounds = YES; hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x9e8a790>>
   |    |    |    |    | <UITextView: 0xa3de800; frame = (20 90; 300 480); text = '
I hope to update the May...'; clipsToBounds = YES; gestureRecognizers = <NSArray: 0x9e72ef0>; animations = { transition=<CATransition: 0x9e8eea0>; }; layer = <CALayer: 0x9e5d770>; contentOffset: {0, 0}>
   |    |    |    |    |    | <UIWebDocumentView: 0xa3dec00; frame = (0 0; 300 188); text = '
I hope to update the May...'; opaque = NO; userInteractionEnabled = NO; gestureRecognizers = <NSArray: 0x9e8d5a0>; layer = <UIWebLayer: 0x9e8d220>>
   |    |    |    |    |    |    | <TileHostLayer: 0x9e8d2b0> (layer)
   |    |    |    |    |    |    |    | <TileLayer: 0x9e90fb0> (layer)
   |    | <UITabBar: 0xad41b80; frame = (0 431; 320 49); autoresize = W+TM; layer = <CALayer: 0xad41c70>>
   |    |    | <_UITabBarBackgroundView: 0xad47950; frame = (0 0; 320 49); opaque = NO; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0xad47a00>>
   |    |    | <UITabBarButton: 0xad42ff0; frame = (2 1; 76 48); opaque = NO; layer = <CALayer: 0xad453e0>>
   |    |    |    | <UITabBarSwappableImageView: 0xad45670; frame = (14 2; 48 32); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xad45740>>
   |    |    |    | <UITabBarButtonLabel: 0xad42410; frame = (24 34; 28 13); text = 'Home'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xad42500>>
   |    |    | <UITabBarButton: 0xad46b10; frame = (82 1; 76 48); opaque = NO; layer = <CALayer: 0xad46460>>
   |    |    |    | <UITabBarSelectionIndicatorView: 0xad5cf90; frame = (0 2; 76 44); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xad5d2f0>>
   |    |    |    | <UITabBarSwappableImageView: 0xad46490; frame = (14 2; 48 32); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xad46510>>
   |    |    |    | <UITabBarButtonLabel: 0xad46790; frame = (15 34; 46 13); text = 'Compose'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xad40650>>
   |    |    | <UITabBarButton: 0xad46630; frame = (162 1; 76 48); opaque = NO; layer = <CALayer: 0xad47080>>
   |    |    |    | <UITabBarButtonLabel: 0xad46df0; frame = (29 34; 19 13); text = 'Buy'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xad466f0>>
   |    |    | <UITabBarButton: 0xad47270; frame = (242 1; 76 48); opaque = NO; layer = <CALayer: 0xad47770>>
   |    |    |    | <UITabBarButtonLabel: 0xad47330; frame = (15 34; 47 13); text = 'Feedback'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xad473d0>>
   |    |    | <UIImageView: 0xad48130; frame = (0 -3; 320 3); opaque = NO; autoresize = W+BM; userInteractionEnabled = NO; layer = <CALayer: 0xad48190>>
(lldb) 
4

4 に答える 4

2

UIControls を正しく処理している (たとえば、すべての userInteractionEnabled プロパティを YES に設定している) と仮定すると、UIControls の上に非表示の UIView を設定したかのように聞こえます。

アプリがシミュレーターで実行されたら、(コードの下にある小さな一時停止ボタンを使用して) アプリケーションを一時停止し、デバッグ プロンプトで次のコマンドを入力して、これを手動で確認できます。

po [[[[UIApplication sharedApplication] delegate] window] recursiveDescription]

これにより、UIWindow とそのすべてのサブビューの説明が出力されます。何らかの方法で UIControls の上に UIView があるかどうかを確認できます。

于 2012-12-10T13:55:01.647 に答える
1

これを試して

for(UIView *view in [self view].subViews){
    [view setUserInteractionEnabled:YES];
}
于 2012-12-10T13:36:08.977 に答える
1

ユーザー操作が無効になっているビューのボタンとテキスト フィールドのサブビューはありますか?

于 2012-12-10T13:32:01.843 に答える
0

コードからテキスト フィールドを作成するときは、テキスト フィールドのフレームを定義する必要があります。

UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 200, 50)];
tf.backgroundColor = [UIColor greenColor];

また、xibファイルから作成する場合は、ユーザー操作が有効になっているチェックがオンになっているか、ビューデリゲートで確認してください

-(void)viewDidLoad{

    [self.nameField setUserInteractionEnabled:YES];
}
于 2012-12-10T14:01:37.500 に答える