2013-04-04 103 views
0

我在复杂的视图层次结构中有一个UITextField。文本字段位于具有标签和文本字段的UIView中,比如labelfield。UITextField没有收到触摸事件

我可以在那里输入文字。

右上角有信息按钮。点击Info时,将加载一个模态视图控制器。从模态视图控制器返回时,UITextField变为无响应。我不能在那里输入任何东西。 labelfiedl被绘制并显示在屏幕上。

有趣的是,如果我按ok按钮,并显示警报,然后文本字段变为活动。另外,在视图顶部,还有一些文字与用户交互启用,如果我点击并尝试选择文本,然后文本框变为活动状态。似乎我必须在超级视图上进行其他活动/触摸,然后文本字段变为活动状态。

为什么不在第一种情况下它会收到任何触摸事件?我试图在viewDidApper方法中使用textField.enabled,becomeFirstResponder,setNeedsDisplay,没有任何工作。

enter image description here

回答

0

这是在iPad上。所以当我按下kb键隐藏键盘并转到信息视图时,我跟着它,当返回时,文本字段接收触摸事件。

似乎,当显示键盘和动画更改视图信息视图时,视图大小和调整大小有一些问题。

所以,我所做的是,当按Info时,隐藏键盘(视图被调整大小),有0.3秒的延迟来隐藏键盘,然后我切换到信息视图。当我复出时,textfield会接收。

霍拉!这是一个肮脏的黑客,但我暂时还找不到任何其他解决方案。

- (void) infoPressed { 
    [self.view endEditing:YES]; 
    /* This is a hack to solve the issue that after coming back from the info screen, 
    the codefiled's textfield was irresponsive. */ 
    [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(gotoInfoScreen) userInfo:nil repeats:NO]; 
} 

- (void) gotoInfoScreen { 
    NSString* filePath = [[NSBundle mainBundle ] pathForResource:FILENAME_INFOTEXT_ACTIVATE ofType:@"html"]; 
    NSString* infoText = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 
    UIViewController* vc = ...// [init vc with info text]; 
    vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:vc animated:YES]; 

} 
3

请尝试以下...

  • 确保超图,该文本字段添加为子视图大到足以包含文本字段(即确保没有任何部分的文本字段在超视图旁边,检查所有视图)。

  • 请确保textfield.use bringSubViewToFront:方法上方没有视图。

  • 尝试启用使用交互的延迟

希望之后的任何上述修复将解决你的问题

+0

显示文本框,并且我检查了(以彩色绘制)其上面的所有视图。 我操纵延迟的东西,然后它的作品。 – karim 2013-04-04 13:23:42