Objective c 用户单击文本字段时是否显示弹出窗口?

Objective c 用户单击文本字段时是否显示弹出窗口?,objective-c,cocoa-touch,uitextfield,uipopovercontroller,Objective C,Cocoa Touch,Uitextfield,Uipopovercontroller,嗨,我一直在学习一本书,当用户点击工具栏按钮时如何显示弹出框。它工作正常,但我想在用户点击文本字段时显示弹出框。这似乎是一个小小的调整。比如改变IBAction “showPopover”方法有一点。该方法的代码如下所示: - (IBAction)showPopover:(id)sender{ if(popoverController == nil){ //make sure popover isn't displayed more than once in the view

嗨,我一直在学习一本书,当用户点击工具栏按钮时如何显示弹出框。它工作正常,但我想在用户点击文本字段时显示弹出框。这似乎是一个小小的调整。比如改变IBAction “showPopover”方法有一点。该方法的代码如下所示:

- (IBAction)showPopover:(id)sender{

    if(popoverController == nil){   //make sure popover isn't displayed more than once in the view
        popoverController = [[UIPopoverController alloc]initWithContentViewController:popoverDetailContent]; 

    [popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    popoverController.delegate = self;
    }
}
除了“presentPopoverFromBarItem”之外,还有一个名为 “presentPopoverFromRect”。我会用它来代替吗?我试图为其编写代码,但我不确定如何将其与文本字段关联,或者如何绘制所需的矩形。有人能帮我吗?谢谢。

是的,有一种方法

要将其连接到UITextField,您需要实现
UITextFieldDelegate
,并从该方法调用showPopover代码


您使用的rect应该是TextField的rect。

您必须使用textfields委托方法
textview应该开始编辑:

大概是这样的:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    if(popoverController == nil){   //make sure popover isn't displayed more than once in the view
        popoverController = [[UIPopoverController alloc]initWithContentViewController:popoverDetailContent]; 
    }
    [popoverController presentPopoverFromRect:textView.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    popoverController.delegate = self;
    return NO; // tells the textfield not to start its own editing process (ie show the keyboard)
}

对于那些想显示弹出框,但不想在点击文本字段时显示键盘的人,我一直使用以下解决方案(注意这与前面的答案不同,textFieldShouldBeginEditing):


希望这有帮助

如果您的textField位于表格单元格内,您的弹出框将指向屏幕顶部,因为textField框架的框架引用了包含textField的视图。因此,您需要为其提供正确的视图引用。您需要使用textField.superview作为视图引用

- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField
{
    ...
    [self.myPopover presentPopoverFromRect:textField.frame inView:textField.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    return NO;
}

这是有道理的!谢谢textView.frame是否只是采用textView的默认大小?如何为第一个参数创建自定义的rect视图?我的视图中有5个文本字段,但我只需要在一个字段中使用它。@chandru将标记分配给所需的textview,您可以通过比较-(BOOL)textview shouldbeginediting:(UITextView*)textview回调方法中的标记来识别textview。我的视图中有5个文本字段,但我只需要在一个字段中使用它。我的视图中有5个文本字段,但我只需要在一个字段中使用它。Chandru,将标记设置为文本字段,然后在TextFieldShoudBeginediting方法中,检查标记,如下所示:
if(textField.tag=5)
谢谢你,好主意!
- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField
{
    ...
    [self.myPopover presentPopoverFromRect:textField.frame inView:textField.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    return NO;
}