2015-10-15 2 views
1

Как я могу отклонить клавиатуру в iOS, когда текстовое поле не имеет IBOutlet для контроллера вида? Мой случай - это UITableView с динамическими ячейками прототипов. Одна из этих ячеек содержит UITextField, однако я не могу добавить IBOutlet, потому что выходные точки не допускаются при повторении содержимого.убрать клавиатуру, когда текстовое поле не имеет IBOutlet

Итак, как я могу добиться отклонения клавиатуры, когда текстовое поле не имеет выхода?

ответ

0

Вы можете использовать это:

[view endEditing:YES]; 
+0

Я действительно нашел эту строку, ища более старые сообщения SO, однако я не знаю, где добавить эту строку. Я добавил IBAction, чтобы поймать событие редактирования конца, а затем [self.view endEditing: YES], но код так и не дошел – cateof

+0

Вы хотите сказать, что хотите поймать конец редактирования? Значит, как закончить редактирование? Может быть, добавить жест как ответ @krushnsinh может помочь вам – anhtu

+0

Что происходит, когда мне нужно щелкнуть на что-то еще после [view endEditing:]? Каждый раз, когда я нажимаю на строку (didSelectIndex ..), segue не выполняется. – cateof

0

попробовать эти ..

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(taped:)]; 
[tap setNumberOfTapsRequired:1]; 
[self.view addGestureRecognizer:tap]; 


-(void)taped:(UITapGestureRecognizer*)gesture 
{ 
    [self.view endEditing:YES]; 
} 

ИЛИ

вы можете сделать это также ..

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    if (![[touch view] isKindOfClass:[UITextField class]]) 
    { 
     [self.view endEditing:YES]; 
    } 
    [super touchesBegan:touches withEvent:event]; 
} 

я надеюсь, что это помогает ..

+0

Я предпочитаю прикосновенияBegan. Но для того, чтобы использовать его, мне нужно что-то дополнительное? Нужен ли мне UITaoGestureRecognizer? – cateof

1

Добавить какой-либо один метод в ViewController.m файл:

Выбор -1

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.view endEditing:YES]; 
} 

Выбор -2

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignFieds)]; 
[self.view addGestureRecognizer:tap]; 

- (void)resignFieds { 

    //choice - 1 , check the all subviews and resign textfield 
    for (UIView * txt in self.view.subviews){ 
    if ([txt isKindOfClass:[UITextField class]] && [txt isFirstResponder]) { 
     [txt resignFirstResponder]; 
    } 
    else 
    { 
    [self.view endEditing:YES]; 
    } 

} 
    //choice 2 , no need to check any subviews , 
    [self.view endEditing:YES]; 

Note : use any one choice 

} 
+0

tanxs много мой дорогой друг –

+0

Выбор 2 не может быть использован, у меня нет выхода (yourtextField). – cateof

+0

@cateof - проверить обновленный ответ –

0

Попробуйте это: -

В Swift: -

UIApplication.sharedApplication().sendAction(Selector("resignFirstResponder"), to: nil, from: nil, forEvent: nil) 

В Objective-C: -

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil]; 

Объяснение: -

Мы можем отправить действие на первый ответчик по телефону sendAction: до: от: forEvent в синтаксисе UIApplication и передавая ноль в качестве цели, и в вашем случае ваш первый ответчик - это ваше текстовое поле.

0

Я предполагаю, что вы создали пользовательскую динамическую ячейку прототипа, в которой есть UITextField.

Не нужно иметь IBOutlet UITextField в вашем классе ViewController, где вы добавили UITableView.

Создайте собственный класс TableViewCell, а затем создайте IBOutlet UITextField в пользовательском классе TableViewCell.

@interface SimpleTableViewCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UITextField *simpleTxtField; 

@end 

Установить класс TableViewCell для пользовательского класса TableViewCell: «SimpleTableViewCell». выбрав TableViewCell и выбрав значок Identity Inspector в правой панели в Xcode.

в вашем классе ViewController подтвердите делегат UITextField. как это.

@interface ViewController() <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate> 

@property (weak, nonatomic) IBOutlet UITableView *simpleTableView; 

@end 

Внедрение функции UITextField.

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 

    [textField resignFirstResponder]; 
    return YES; 
} 

затем в Tableview: метод cellForRowAtIndexPath из UITableView Datasource набор вашего пользовательского TableViewCell в (SimpleTableViewCell) TextField делегатом самостоятельно.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    SimpleTableViewCell *cell = [self.simpleTableView dequeueReusableCellWithIdentifier:@"simpleCell" forIndexPath:indexPath]; 

    cell.simpleTxtField.delegate = self; 

    return cell; 
} 

и всякий раз, когда вы выбираете TextField из Cell Клавиатура будет отображаться и при нажатии кнопки возврата метод TextField делегат получит вызов и клавиатура будет получить увольте. Надеюсь, это поможет.

Смежные вопросы