无法在iOS中从UITextField显示弹出窗口



我正在制作一个非常基本的应用程序,当用户在UITextField中输入文本时显示弹出窗口。不幸的是,弹出窗口没有显示,默认的键盘出现了(不应该)。下面是我的相关代码:

NumberPadViewController.h

    #import <UIKit/UIKit.h>
    #import "NumberViewController.h"
    @interface NumberPadViewController : UIViewController <UITextFieldDelegate> {
        IBOutlet UITextField *numTest;
    }
    @property (nonatomic, strong) NumberViewController *numberPicker;
    @property (nonatomic, strong) UIPopoverController *numberPickerPopover;
@end

NumberPadViewController.m

- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField
{
    // Create popover controller if nil
    if(_numberPickerPopover == nil){   //make sure popover isn't displayed more than once in the view
        _numberPickerPopover = [[UIPopoverController alloc]initWithContentViewController:_numberPicker];
    }
    [_numberPickerPopover presentPopoverFromRect:numTest.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    return NO;
}

我的弹出窗口类叫做numberviewcontroller。h

@interface NumberViewController : UIViewController {

}
@property (strong, nonatomic) IBOutlet UIButton *oneButton;

NumberViewController.m

#import "NumberViewController.h"
@interface NumberViewController ()
@end
@implementation NumberViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        NSInteger buttonHeight = _oneButton.frame.size.height * 4;
        NSInteger buttonWidth = _oneButton.frame.size.width * 3;
        self.contentSizeForViewInPopover = CGSizeMake(buttonWidth, buttonHeight);
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

我在Storyboard中创建了UITextField,并在那里设置了委托。有人能看出我做错了什么吗?

提前感谢所有回复的人。

确保正在调用textFieldShouldBeginEditing委托方法。剩下的代码看起来是正确的。

这只是一个想法,但当一个弹出窗口做一个弹出窗口的事情我认为它成为第一响应者,但你的文本视图是第一响应者…所以它可能不能做得太多....如果这是错误,那么在你告诉弹出窗口出现之前你可以说[textView resignFirstResponder];看看有没有帮助....这只是一个想法,虽然不是100%确定,我必须做一些测试~

还要检查_numberPicker是否也不是nil我不知道如果你试图显示一个没有控制器的弹出窗口会发生什么但你可以看到问题是否出在

看到你的弹出窗口没有在故事板中表示(如果我读了你的帖子正确),我认为你需要添加弹出窗口视图作为代码中的子视图。比如:

[self addSubview:_numberPickerPopover];

可能有几个地方可以这样做。可能是最有意义的在你的textFieldShouldBeginEditing:方法,在你已经启动它。

最新更新