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

时间:2011-02-24 04:06:16

标签: objective-c cocoa-touch uitextfield uipopovercontroller

您好我一直在关注如何在用户点击工具栏按钮项时显示弹出窗口的书。它工作正常但我想在用户点击textField时显示popover。这似乎是一些微小的调整。就像改变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”。我会用它吗?我试着为它编写代码,但我不知道如何将它与我的TextField相关联或如何绘制矩形所需。任何人都可以帮我这个吗?谢谢。

4 个答案:

答案 0 :(得分:10)

您必须使用textfields委托方法textViewShouldBeginEditing:

这样的事情:

- (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)
}

答案 1 :(得分:8)

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

/*
 *  Handle when text field is about to start edit mode
 */
- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField
{
  // Create popover controller if nil
  [self.myPopover presentPopoverFromRect:textField.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
  return NO;
}

希望这有帮助!

答案 2 :(得分:1)

是的,有presentPopoverFromRect方法。

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

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

答案 3 :(得分:1)

如果textField位于表格单元格内,则弹出窗口将指向屏幕顶部,因为textField框架的框架是对包含文本字段的视图的引用。所以你需要给它正确的视图参考。您需要使用textField.superview作为视图参考。

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