如何在导航viewcontrollers时从firstresponder中删除键盘

时间:2016-03-01 20:26:47

标签: ios objective-c

我有一个带有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];
}

1 个答案:

答案 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]