[英]UITextView can't dismiss the keyboard in programmatically-created UITableView
在這個問題上似乎有很多。 但是我無法獲得任何有效的解決方案。
我的代碼創建了一個tableView
充滿了不同內容的單元格(基於JSON),用戶應在每個單元格中輸入信息。 我遇到的問題是,當用戶點擊單元格外部的某個位置(即tableView
背景)時,我希望鍵盤關閉。
didSelectRowAtIndexPath:
方法不好。
touchesBegan:
完全不會觸發( tableView
啟用了用戶交互,但是我認為還有其他原因)。
我已經向tableView
添加了一個手勢,但是后來我無法開始編輯。
我知道resignFirstResponder
。 但是我不知道正在編輯哪個字段。 所以我認為,我需要使用endEditing:
方法。 但是當用戶在單元格外部觸摸時,我只是無法調用它。
任何幫助,將不勝感激。
如果這是@JFS所說的textField
,則可以在下面的此方法中設置delegate
並將其簽名。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
否則,如果這是一個textView
,你可以完成按鈕的添加工具欄inputAccessoryView
你textView
和辭職您textView
。
我還有兩個想法
餿主意:
嘗試在單元格背景中創建一個不可見的按鈕,並添加一個操作方法以將其辭職。 但這在您使用UITableView
didSelectRowAtIndexPath:
方法時會感到困惑。
好主意:(好主意)
UITableView
當然將具有UIScrollview
。 因此,在scrollViewDidScroll:
方法中,設置[self endEditing:YES]
肯定可以工作。
好點子2創建一個新的View
或Button
,並將其放置的所有意見,頂部當textView
是在編輯和調用endEditing:
方法當用戶觸摸視圖或按鈕。
在TABLEVIEW中獲取觸摸檢測:
這些常見問答會為您提供幫助。
https://stackoverflow.com/a/8787019/1083859
好吧,經過大量的嘗試設法弄清楚了(某物)之后,它不是很好,但是可以工作。
表格周圍的大多數空隙都由節標題(小部分由單元格壁占據)彌補。 為了使這些區域能夠調用方法,我向部分標題添加了一個手勢,如下所示:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
if (sectionTitle == nil)
{
return nil;
}
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(20, 8, 320, 20);
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor colorWithRed:76/255.0 green:86/255.0 blue:108/255.0 alpha:255/255.0];
label.shadowColor = [UIColor grayColor];
label.shadowOffset = CGSizeMake(-0.0, 0.0);
label.font = [UIFont boldSystemFontOfSize:16];
label.text = sectionTitle;
UIView *view = [[UIView alloc] init];
[view addSubview:label];
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(eventMenuTap)];
[view addGestureRecognizer:singleTap];
return view;
}
這也使我能夠自定義每個部分的標簽。 最終結果是,當滾動表時,如果在單元格(即標題)之外的任何地方(幾乎)單擊了任何地方,則我將關閉鍵盤,然后將調用eventMenuTap。
-(void)eventMenuTap
{
NSLog(@"Tap has begun...");
[self.view endEditing:YES];
}
感謝您的所有想法並為此提供幫助。
對於任何路人,我發現的最簡單,最有效的解決方案需要兩件事:
1:子類化表視圖,並將以下內容添加到其.m中:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// send your own dismiss message; you can use self.delegate to refer to TV's TVC...
[((SearchVC *)((UITableViewController *)self.delegate).parentViewController).searchBar resignFirstResponder];
// crucial!
[super touchesBegan:touches withEvent:event];
}
2:將以下內容添加到TVC:
- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// send your own dismiss message...
[((SearchVC *)self.parentViewController).searchBar resignFirstResponder];
}
這對我來說效果很好。 我最初嘗試將touchesBegan添加到我的子類化單元中,但是發現這是不夠的,並且在添加了這兩項之后,就顯得多余了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.