在没有引用文本字段的情况下解雇键盘

时间:2014-06-05 17:55:56

标签: ios objective-c uitableview keyboard

我有一个UITableView,其中包含一些包含UITextFields的单元格。如果我开始编辑单元格#1然后向下滚动以使其关闭屏幕,然后尝试使用[self.view endEditing:YES]解除键盘,键盘将保留在屏幕上。

我相信这是因为uitextfield不再存在,因此技术上没有任何东西是"编辑"。

这似乎是合乎逻辑的,因为当我向上滚动以便单元格#1可见时,它不再编辑,因为它已被解除分配/重新使用。

有没有办法可以解雇键盘?还是有一种方法可以在单元格离开屏幕时关闭键盘?

下面是一些示例代码,我不确定它有多么有用......

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
       CGFloat pageWidth = self.scrollView.frame.size.width;
       float fractionalPage = self.scrollView.contentOffset.x / pageWidth;
       NSInteger page = lround(fractionalPage);
       self.pageControl.currentPage = page;

       if (self.page != page) {
           //dismiss keyboard when page changes
           self.page = page;
           [self.view endEditing:YES];
       }
   }


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

        if(indexPath.row == kIndexOfItemID) {

            HMFItemIDCell *itemIDCell = [tableView dequeueReusableCellWithIdentifier:@"HMFItemIDCell"];

            [itemIDCell setupCellWithBlock:^(NSString *string) {
                self.mutableItem.itemID = string;
            }];

            //Adjust Font to match iOS 7
            itemIDCell.customLabel.text = @" Item ID";
            itemIDCell.customLabel.font = [UIFont fontWithName:@"System" size:17];

            self.idField = itemIDCell.customTextField;

            itemIDCell.customLabel.textColor = [UIColor blueColor];

            self.idField.text = self.mutableItem.itemID;
            self.idField.delegate = self;
            self.idField.tag = kIDTextField;

            itemIDCell.selectionStyle = UITableViewCellSelectionStyleNone;

            return itemIDCell;

    } //... other cells are setup basically the same way.

}

1 个答案:

答案 0 :(得分:2)

您可以轻松拥有UITextField的属性,并且通过使用UITextField委托方法,您可以获得UITextField的参考。

定义属性

@property(nonatomic, strong)UITextField *lastSelectedField;

UITextField的代表中处理此

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    self.lastSelectedField=textField;
    return YES;
}

如果您为文本字段设置委托,则会调用上面的委托。

现在你有了参考资料,用它来辞职。

if (self.page != page) {
    //dismiss keyboard when page changes
    self.page = page;
    [self.view endEditing:YES];
   [self.lastSelectedField resignFirstResponder];

}

完成。欢呼声。