我有一个带有3个View Controller的应用程序。
第一个是UITableView
,其中包含类别列表。
第二个是另一个UITableView
,浮动UITextField
。
第3个只是带有webView的UIViewController
。
在应用启动时,我不需要任何特别的东西,直到TableView2
。
在TableView2
我有一个浮动UITextField
设置如此......
-(void)viewWillAppear:(BOOL)animated {
[self setupFloatTextBox];
[noteTextField becomeFirstResponder];
}
- (void)setupFloatTextBox {
CGFloat screenWidth = [[UIScreen mainScreen] bounds].size.width;
noteTextField = [[UITextField alloc] initWithFrame:CGRectMake(5, 70, screenWidth - 10, 30)];
noteTextField.backgroundColor = Rbg2UIColor(255, 153, 51);
[noteTextField.layer setBorderWidth:0.5f];
[noteTextField setAlpha:1.0f];
[noteTextField setTag:9999];
[noteTextField setFont:[UIFont fontWithName:@"Arial Rounded MT Bold" size:18.0f]];
[noteTextField addTarget:self action:@selector(postJSON:) forControlEvents:UIControlEventEditingDidEnd];
[noteTextField addTarget:self action:@selector(textFieldEndEditing:) forControlEvents:UIControlEventEditingDidEndOnExit];
[self.navigationController.view addSubview:noteTextField];
}
我将其删除
-(void)viewWillDisappear:(BOOL)animated {
[[self.navigationController.view viewWithTag:9999] removeFromSuperview];
}
我的问题是,无论是回到第一个TVC还是前往我的WebView,我都无法让键盘消失。
我试过将这些扔进viewWillDisappear
但没有运气
[noteTextField resignFirstResponder];
//
[[self view] endEditing:YES];
[self.view endEditing:YES];
//
[noteTextField endEditing:YES];
//
for(id obj in self.view.subviews)
{
[obj resignFirstResponder];
}
答案 0 :(得分:0)
首先,如果您在viewDidLoad
方法中创建文本字段,我认为您可以获得更稳定的行为。这是因为每次创建视图控制器时都会调用viewDidLoad
,而不是每当视图变为可见时调用的viewWillAppear:
(例如,如果你从通知中心回来)。这可能是一个问题,因为您每次UITextField
时都会viewWillAppear:
创建一个新的费用,因此您的视图中可能会有UITextField
个重复。
其次,如果只在第二个视图控制器中需要,为什么要将UITextField
添加到self.navigationController
?您可以将其添加到第二个视图控制器的主视图中。
第三,也是最重要的,您的代码不起作用,因为应该从包含endEditing
的视图中调用UITextField
方法。在您的情况下,您要在self.navigationController.view
中添加文本字段,该字段位于视图层次结构中self.view
之上,因此调用[self.view endEditing:YES]
将不执行任何操作。相反,您可以尝试使用[self.navigationController.view endEditing:YES]
或更好的[textField resignFirstResponder]
。