2012-02-10 32 views
2

我已經創建了一個屏幕上有一個UITextField。當我得到一個EditingDidBegin事件時,我resignFirstResponder,帶上另一個textField的Popover,併爲該TextField調用BecomeFirstResponder。添加[myUITextField becomeFirstResponder];不提示鍵盤

當它運行時,我得到閃爍插入指針和X清除內容。雖然沒有鍵盤。主UIView設置爲UserInteractionEnabled:YES。

第一個UITextField的目標操作,它對它自己的看法。

[textField addTarget:self action:@selector(wantsToEditValue:) forControlEvents:UIControlEventEditingDidBegin]; 

目標操作選擇:

- (IBAction)wantsToEditValue:(id)sender { 
// set notification so we can update from popover 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(saWriteValue:) 
              name:kRefreshFromPopover object:nil]; 

    //we dont want the TagValue textfield to really be the first responder. 
[textField resignFirstResponder]; 


    [... setup popoverVC, and View. present popover...] 

}

下面是創建第二的UITextField的代碼。此代碼是在VC的酥料餅..

- (void)viewDidLoad 
{ 
if (IoUIDebug & IoUIDebugSelectorNames) { 
    NSLog(@"%@ - %@", [self description], NSStringFromSelector(_cmd)); 
} [super viewDidLoad]; 

[self createElementInputControl]; 
[self createWriteButton]; 

    //We want the input Focus 
    [textFieldInput becomeFirstResponder]; 


    //Resize our view to handle the new width 
CGRect newViewSize = CGRectMake(self.view.frame.origin.x, 
           self.view.frame.origin.y, 
           writeButton.frame.origin.x + writeButton.frame.size.width + kWriteElementOffset , 
           self.view.frame.size.height); 

[self.view setFrame:newViewSize]; 
} 

創建輸入碼:

-(void) createElementInputControl { 


textFieldInput = [[UITextField alloc] initWithFrame:CGRectMake(kWriteElementOffset , 
                      kWriteElementHeightOffset, 
                      kTagValueInputInitialWidth, 
                      kWriteElementDefaultHeight)]; 

textFieldInput.borderStyle = UITextBorderStyleRoundedRect; 
textFieldInput.clearButtonMode = UITextFieldViewModeWhileEditing; 
textFieldInput.textAlignment = UITextAlignmentLeft; 
[textFieldInput setDelegate:self]; 
[textFieldInput setKeyboardType:UIKeyboardTypeDefault]; 

    // Set the value of the text 
[textFieldInput setText:self.myTag.value]; 

CGSize textFieldInputSize = [textFieldInput.text sizeWithFont:textFieldInput.font]; 

    //Set the Button Width 
[textFieldInput setFrame:CGRectMake(textFieldInput.frame.origin.x, textFieldInput.frame.origin.y, textFieldInputSize.width + kTagValueInputWidthBuffer, textFieldInput.frame.size.height)]; 

[self.view addSubview:textFieldInput]; 
} 

當我刪除了becomeFirstResponder代碼中,酥料餅拿出正常,雖然沒有閃爍的插入指針。我點擊字段,我得到插入指針,X清除內容按鈕,並且是一個鍵盤。

我想讓鍵盤顯示而不必點擊新的文本字段。

謝謝!

回答

1

爲了成爲第一響應者,視圖必須位於視圖層次結構中。 您需要將textFieldInput添加爲子視圖。

按照蘋果的doc在UIResponder:

您可能會調用該方法做出響應者的物體,如視圖中的第一響應者。但是,如果它是視圖層次結構的一部分,則只應在該視圖上調用它。如果視圖的window屬性包含一個UIWindow對象,則它已安裝在視圖層次結構中;如果它返回nil,則該視圖將從任何層次結構中分離出來。

+0

這是不是我的代碼的第一個版本的層次結構的一部分。它現在是視圖層次結構的一部分。我在ViewDidLoad中添加了[control becomeFirstResponder]。所以,因爲我可以看到控制,我會假設它在視圖層次結構中。將它添加到viewDidLoad將確保它在那個時候已經被添加。有了這個改變,它仍然無法正常工作。 – scooter133 2012-02-10 15:45:49

+0

如何聲明textFieldInput?我想知道在您的呼叫成爲FirstResponder的時候它是否有效。 另外,你有沒有嘗試把createFirstResponder調用放在createElementInputControl裏面 – Rayfleck 2012-02-10 16:05:51

+0

爲了清晰起見我改變了代碼,所以我不必包含更多的支持代碼。它的聲明如下:'UITextField * textFieldInput = [[UITextField alloc] initWithFrame ...',並且在將它添加到視圖後釋放textFieldInput,然後傳回指向它的指針,以便稍後可以訪問它。 becomeFirstResponder最初是在createElementInputControl中。 – scooter133 2012-02-10 17:00:40

0

當您從didBeginEditing調用成爲第一響應者時,您將遇到無限循環。原因是,當您調用becomeFirstResponder時,它將調用didBeginEditing。因此,它解釋了光標閃爍和您的發言

當我刪除了becomeFirstResponder代碼中,酥料餅拿出作爲 正常,雖然沒有閃爍的插入指針。我點擊該字段,我得到 插入指針,X清除內容按鈕,並且是一個鍵盤。

解決您的問題,

在beginEditingMethod,

if(texfield.tag == firstTextFieldTag) 
{ 
//Create second TextField and make it become first responder 
} 
else 
{ 
// do want you want in the beginEditing of your second textfield. 
} 
+0

我不認爲這適用於我的代碼。我編輯了OP來包含更多支持代碼。在didBeginEditing中,我只是resignFirstResponder,然後調用管理第二個UITextField的popover。 – scooter133 2012-02-10 15:47:17