我已经创建了一个包含UITextField的屏幕。当我得到一个EditingDidBegin事件时,我resignFirstResponder,在其中添加另一个textField的Popover,并为该TextField调用其上的BecomeFirstResponder。
当它运行时,我得到闪烁插入指针和X清除内容。虽然没有键盘。 Master 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的代码。此代码位于Popover的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代码时,Popover正常,但没有闪烁的插入指针。我点击该字段,我得到插入指针,X清除内容按钮,是键盘。
我希望键盘显示而无需单击新的文本字段。
谢谢!
答案 0 :(得分:1)
要成为第一响应者,视图必须位于视图层次结构中。 您需要将textFieldInput作为子视图添加到某个内容中。
根据Apple在UIResponder中的文档:
您可以调用此方法来创建响应者对象,例如查看第一响应者。但是,如果它是视图层次结构的一部分,则只应在该视图上调用它。如果视图的window属性包含UIWindow对象,则它已安装在视图层次结构中;如果它返回nil,则视图将从任何层次结构中分离。
答案 1 :(得分:0)
当您从didBeginEditing调用成为第一响应者时,您将遇到无限循环。原因是,当您调用becomeFirstResponder时,它会调用didBeginEditing。所以它解释了光标闪烁和你的陈述
当我删除了becomeFirstResponder代码时,Popover出现了 正常,但没有闪烁的插入指针。我得到了领域 插入指针,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.
}