2012-04-09 17 views
0

我正在實現一個UITableView,它包含幾個自定義的UITableViewCells,每個UITableViewCells都包含UITextField。UITextField上的第二次敲擊(在UITableViewCell子類中)意外地關閉了鍵盤

與大多數人希望鍵盤在某些事件中消失不同,我希望它始終顯示。 問題是,第一次點擊UITextField觸發鍵盤出現沒有任何問題。但是一旦我再次點擊它,現在出現的鍵盤現在就消失了。

此外,另一個相關的問題是我不能改變遊標在UITextField中的位置。 一旦我按住UITextField以改變光標的當前位置,放大鏡就會按預期彈出。但是一旦我放開水龍頭,鍵盤立即關閉。

我該如何解決這個問題?

- (void)viewDidLoad 
{ 
    ... 
    TagDetailCell *cell1 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject]; 
    TagDetailCell *cell2 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject]; 
    TagDetailCell *cell3 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject]; 
    self.cells=[NSArray arrayWithObjects:cell1, cell2, cell3, nil]; 
    ... 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell=[self.cells objectAtIndex:indexPath.row]; 
    cell.selectionStyle=UITableViewCellSelectionStyleNone; 

    switch (indexPath.row) { 
     ... 
     ((TagDetailCell*)cell).fieldLabel.text= ...; 
     ((TagDetailCell*)cell).fieldValue.clearButtonMode=UITextFieldViewModeWhileEditing; 
     ((TagDetailCell*)cell).fieldValue.text=...; 
     [((TagDetailCell*)cell).fieldValue addTarget:self action:@selector(textFieldChanged:) forControlEvents:UIControlEventEditingChanged]; 
     ... 
    } 
    return cell; 

} 

我沒有實現UITextField的任何代表。我是不是該?

回答

1

我很蠢。我繼承的UITextField和覆蓋下面的方法,以防止用戶複製/粘貼文本:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender  
{  
    [UIMenuController sharedMenuController].menuVisible = NO; //do not display the menu 
    [self resignFirstResponder];      //do not allow the user to selected anything 
    return NO; 
} 

鍵盤解聘的問題從[self resignFirstResponder]的電話來了。因此,刪除它可以解決問題。

0

查看文檔中的UIViewController方法disablesAutomaticKeyboardDismissal
引用蘋果文檔:

重寫此方法在子類中,以允許或禁止電流輸入視圖(通常是系統的鍵盤)的解僱 從想要輸入視圖一個控制改變 時那不。在 正常情況下,當用戶點擊需要輸入視圖的控件時,系統會自動顯示該視圖。隨後不想要輸入視圖的 控件中的點擊會導致 當前輸入視圖被取消,但可能不會在所有情況下取消。您可以在這些未決情況下覆蓋此方法以允許輸入 視圖被解散或使用此方法防止視圖在其他情況下被解散。

+0

謝謝你提供有用的信息。我以前不知道這件事。但是,即使在'disablesAutomaticKeyboardDismissal'中返回YES,鍵盤仍然會消失。將演示樣式設置爲'UIModalPresentationFormSheet'也沒有幫助。 – 2012-04-09 14:46:54

+0

我試圖確保'disablesAutomaticKeyboardDismissal'被正確調用,但是這個函數根本沒有被調用。任何想法? – 2012-04-09 14:50:53

+0

嘗試將'UITextField'的委託設置到您的視圖控制器。 – Gobot 2012-04-09 14:55:40

相關問題