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

ser*_*487 4 cocoa-touch objective-c 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

除了"presentPopoverFromBarItem"之外还有另一个实例方法叫做"presentPopoverFromRect".我会用它吗?我试着为它编写代码,但我不确定如何将它与我的TextField相关联或如何绘制需要的矩形.任何人都可以帮我这个吗?谢谢.

Mat*_*uch 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)
}
Run Code Online (Sandbox Code Playgroud)


w3b*_*ark 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;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!