Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 触摸UITextField时显示子视图_Iphone_Uitextfield_Subview_Addsubview - Fatal编程技术网

Iphone 触摸UITextField时显示子视图

Iphone 触摸UITextField时显示子视图,iphone,uitextfield,subview,addsubview,Iphone,Uitextfield,Subview,Addsubview,我对iPhone的开发还很陌生,所以请原谅我的无知。我在谷歌上搜索了一下,到目前为止没有找到任何有用的东西。以下是我想做的: 我想在触摸UITextField时弹出一个子视图(屏幕的其余部分显示在背景中)。弹出窗口是我在IB中创建的一个计算器UIView。根据苹果公司的开发者指南,弹出窗口似乎比定制键盘更好 这是我的问题。如何捕获UITextField上的触摸以及如何显示子视图 我尝试了以下方法来显示子视图,但没有成功: CustomCalculator *customCalc = [[

我对iPhone的开发还很陌生,所以请原谅我的无知。我在谷歌上搜索了一下,到目前为止没有找到任何有用的东西。以下是我想做的:

我想在触摸UITextField时弹出一个子视图(屏幕的其余部分显示在背景中)。弹出窗口是我在IB中创建的一个计算器UIView。根据苹果公司的开发者指南,弹出窗口似乎比定制键盘更好

这是我的问题。如何捕获UITextField上的触摸以及如何显示子视图

我尝试了以下方法来显示子视图,但没有成功:

    CustomCalculator *customCalc = [[CustomCalculator alloc] initWithNibName:@"CustomCalculator" bundle:nil];

UIViewController *calcController = [self.customCalc.view];

[self.view addSubview:calcController.view];

实现UITextFieldDelegate,方法如下

-(void) textFieldDidBeginEditing:(UITextField *)textField
当您触摸UITextField时,将触发上述方法。然后,您可以定位UIPopoverController(我猜这就是您用来在弹出窗口中显示视图的方式),并在完成后将值传递回UITextField。因此,popover的/viewcontroller的委托应该是您的textfield对象

编辑:看到下面的另一个答案后,我突然想到我忘了告诉你如何阻止键盘显示。只需将此作为我上面提到的方法的第一行:

    [textField resignFirstResponder];

实现UITextFieldDelegate,方法如下

-(void) textFieldDidBeginEditing:(UITextField *)textField
当您触摸UITextField时,将触发上述方法。然后,您可以定位UIPopoverController(我猜这就是您用来在弹出窗口中显示视图的方式),并在完成后将值传递回UITextField。因此,popover的/viewcontroller的委托应该是您的textfield对象

编辑:看到下面的另一个答案后,我突然想到我忘了告诉你如何阻止键盘显示。只需将此作为我上面提到的方法的第一行:

    [textField resignFirstResponder];

使用委托方法:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
   //Add your subview here 

   return NO; //this will stop the keyboard from poping up
  }
这样,当有人点击文本字段时,您的视图将弹出,而不是键盘。
现在,一旦用户与视图交互,您就必须直接操作textfield.text属性中的字符串,作为用户点击视图中按钮的反应

使用委托方法:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
   //Add your subview here 

   return NO; //this will stop the keyboard from poping up
  }
这样,当有人点击文本字段时,您的视图将弹出,而不是键盘。
现在,一旦用户与视图交互,您就必须直接操作textfield.text属性中的字符串,作为用户点击视图中按钮的反应

有没有办法不用UIPopoverController?我可以添加一个子视图吗?模态视图是另一种选择。或者,如果这是困扰你的问题,你也可以把箭头从弹出式沙发上取下。只需将0传递给PermittedRowDirections,即self.popoverController presentPopoverFromRect:add.frame inView:self.view PermittedRowDirections:0动画:是];或者,您可以在适当的坐标处将其添加为子视图,并在完成将数据传递到UIExtField后使用removeFromSuperView将其删除有没有办法在没有UIPopoverController的情况下执行此操作?我可以添加一个子视图吗?模态视图是另一种选择。或者,如果这是困扰你的问题,你也可以把箭头从弹出式沙发上取下。只需将0传递给PermittedRowDirections,即self.popoverController presentPopoverFromRect:add.frame inView:self.view PermittedRowDirections:0动画:是];或者,在将数据传递到UITextFieldUIViewController*calcController=[self.customCalc.view];?之后,可以将其添加为适当坐标处的子视图,并使用removeFromSuperView将其删除??为什么要将UIView分配给UIViewController对象?@Heather:如果CustomCalculator是UIViewController的子类,您可以删除第三行,只需使用[self.view addSubView:customCalc.view];UIViewController*calcController=[self.customCalc.view]??为什么要将UIView分配给UIViewController对象?@Heather:如果CustomCalculator是UIViewController的子类,您可以删除第三行,只需使用[self.view addSubView:customCalc.view];向上述方法返回“否”不会触发textViewFieldDidBeginEditing方法。那么,我们如何知道文本字段是否已被触摸?然后我们可能需要截取文本字段区域上的触摸。一个更简单的解决方案是在textField DidBeginediting中拦截触摸,并在textField上使用resignFirstResponder消息,使键盘永远不会出现。我们知道触摸textField是因为触发了textfieldShouldBeginEditing。这就是为什么。在textFieldDidBeginEditing中捕获键盘意味着在流程中稍后停止键盘。这没什么。。。我时不时地尝试用鼠标将桌上的空可乐瓶移到我的垃圾桶:)对上述方法返回“否”不会触发textViewFieldDidBeginEditing方法。那么,我们如何知道文本字段是否已被触摸?然后我们可能需要截取文本字段区域上的触摸。一个更简单的解决方案是在textField DidBeginediting中拦截触摸,并在textField上使用resignFirstResponder消息,使键盘永远不会出现。我们知道触摸textField是因为触发了textfieldShouldBeginEditing。这就是为什么。在textFieldDidBeginEditing中捕获键盘意味着在流程中稍后停止键盘。这没什么。。。我时不时地试着用鼠标把桌子上的空可乐瓶移到我的垃圾桶里:)