簡體   English   中英

UITextView無法在以編程方式創建的UITableView中關閉鍵盤

[英]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 ,你可以完成按鈕的添加工具欄inputAccessoryViewtextView和辭職您textView

我還有兩個想法

餿主意:
嘗試在單元格背景中創建一個不可見的按鈕,並添加一個操作方法以將其辭職。 但這在您使用UITableView didSelectRowAtIndexPath:方法時會感到困惑。

好主意:(好主意)
UITableView當然將具有UIScrollview 因此,在scrollViewDidScroll:方法中,設置[self endEditing:YES]肯定可以工作。

好點子2創建一個新的ViewButton ,並將其放置的所有意見,頂部當textView是在編輯和調用endEditing:方法當用戶觸摸視圖或按鈕。

在TABLEVIEW中獲取觸摸檢測:

這些常見問答會為您提供幫助。

https://stackoverflow.com/a/8787019/1083859

為什么我的UITableView不響應touchesBegan?

https://stackoverflow.com/a/8786706/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM