无法在UITextField中显示iOS中的popover

时间:2013-05-24 20:03:44

标签: ios uitextfield uipopovercontroller uitextfielddelegate

我正在开发一个非常基本的应用程序,当用户在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;

}

我的popover类叫做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,并在那里设置了委托。谁能看到我做错了什么?

感谢所有回复的人。

3 个答案:

答案 0 :(得分:0)

这只是一个想法,但是当一个popover做一个popover事情我认为它成为第一响应者,但你的文本视图是第一响应者...所以它可能无法完成它....如果这是在你告诉popover出现之前你可以说[textView resignFirstResponder];看看是否有帮助....这只是一个想法虽然不是100%肯定我将不得不做一些测试〜

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

答案 1 :(得分:0)

看到你的popover没有在故事板中表示(如果我正确地阅读你的帖子)我认为你需要将popover视图添加为代码中的子视图。类似的东西:

[self addSubview:_numberPickerPopover];

可能有一些地方可以做到这一点。可能在你的textFieldShouldBeginEditing:方法中,在你进入它之后最有意义。

答案 2 :(得分:0)

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