我有一个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.
}
答案 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];
}
完成。欢呼声。