在我的项目中,我将视图设置为我的应用程序的根视图。
在这个根视图的控制器中,我有这样一个层次结构:
rootview - [addsubview] - foregroundView - [addsubview] - textfield
我在代码而不是xib中完成了这项工作。
在这种情况下,文本字段无法聚焦。当我点击屏幕上的文本字段时似乎没有任何反应。但如果我这样修改:
rootview - [addsubview] - foregroundView
rootview - [addsubview] - textfield
一切都很好。
由于我想将foregroundView和textfield作为一个组,我更喜欢使用前一种风格。有没有想过这个?非常感谢。
以下是我遇到麻烦的核心源代码:
//it's a viewController.m , it's view has been set as the root view for the app.
self.foregroundView = [[UIImageView alloc] initWithFrame:CGRectMake(15, 140, 290, 250)];
UIImage *foregroundImage = [XYZImageProcessor resizeImage:[UIImage imageNamed:@"Texture0203.jpg"] toSize:CGSizeMake(275, 250)];
[self.view addSubview:self.foregroundView ];
self.nickNameTextField = [self.class customTextFieldMake:CGRectMake(80, 200, 150, 30)];
[self.view addSubview:self.nickNameTextField];
//if I change it to [self.foregroundView addSubview:self.nickNameTextField],the textfield can not be focused.
答案 0 :(得分:2)
此声音就好像您的foregroundView
userInteractionEnabled
设置为NO。这并不仅仅意味着foregroundView
没有接收到触摸事件 - 它的任何子视图都没有。见How to get touches when parent view has userInteractionEnabled set to NO in iOS。 (简答:你不能。)
因此,请在构建视图时尝试设置[foregroundView setUserInteractionEnabled:YES]
。
如果foregroundView
实施了自己的hitTest:withEvent:
,它还可以阻止与其子视图的互动。
答案 1 :(得分:0)
尝试在 viewWillAppear:
中执行此操作[desiredField becomeFirstResponder];
通过使该字段成为第一个响应者,它具有焦点并且将显示键盘。