2011-12-12 36 views
0

我正在將視圖控制器作爲模式呈現。該視圖控制器具有通過IB連接的多個UITextField。UITextField不會退出第一響應者?

我的問題是當按下返回鍵時,委託方法被調用,但由於某種原因,對給定textField的resignFirstResponder調用不是。即使我在textFieldShouldReturn委託方法中將消息打印到控制檯,它也會打印出來,但它會拒絕調用resign方法。

在shouldReturn委託方法我只有:

-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 

這真的從來沒有發生在我身上,它只是根本不會resignFirstResponder。正如我之前提到的,我可以將一個打印輸出到控制檯,只是爲了驗證shouldReturn方法是否被調用,並且確實如此。

我也試過這只是爲了看看委託是否已設置,它確實對UITextField行爲進行了更改。

-(void)textFieldDidBeginEditing:(UITextField *)textField { 
    [textField setTextAlignment:UITextAlignmentCenter]; 
} 

這個問題真的讓我感到困惑。即使我試圖直接在文本字段上調用resignFirstResponder,它也不會關閉鍵盤。

-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
    if ([textField isEqual:self.productTextField]) { 
     NSLog(@"Product textfield"); 
     [self.productTextField resignFirstResponder]; 
    } else if ([textField isEqual:self.quantityTextField]) { 
     NSLog(@"Quantity textfield"); 
    } 
    return YES; 
} 

這兩個日誌都與它們各自的文本字段一起工作,並分別打印出相應的消息。但是直接傳遞文本字段時調用該方法仍然沒有做任何事情。

找到了答案,顯然,UIPresentationFormSheet不允許你擺脫鍵盤。我嘗試了一種不同的表現風格,它工作。 @Cal,感謝您的question

+0

您可能只想在這裏使用'textField == self.productTextField'而不是'[textField isEqual:self.productTextField]'(對於另一個類似)。要麼你有一個對同一個實例的引用,要麼你沒有......在當前控制器的範圍內,當你處理的實例只有一個實例存在時,相等並不意味着太多。 –

+0

我將標籤分配給所有文本框設置它們,並添加一個檢查標籤,而不是[textField isEqual:self.productTextField] – StudentX

回答

4

我認爲你需要在textFieldShouldReturn方法中明確寫出[textField resignFirstResponder];

如果你已經這樣做了,也許它確實很奇怪。你可以發佈你的代碼嗎? :)

+0

我希望它是如此簡單。委託方法被調用,但文本字段不會resignFirstResponder。 –

+0

3我想到的其他想法:1 /它真的是你使用的UITextField,而不是重新實現resignFirstResponder不調用超類的子類? 2 /你的視圖控制器中是否有一個名爲textField的屬性? 3 /如果您在使用的兩個文本字段上都調用resignFirstResponder會怎麼樣? –

+0

我很感激幫助。要回答你的想法,不要全部三個。然而,我確實找到了答案。請查看我編輯的問題。 –

相關問題