0

我正在开发一个非常基本的应用程序,当用户在 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,并在那里设置了委托。谁能看到我做错了什么?

提前感谢所有回复的人。

4

3 回答 3

0

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

于 2013-05-24T20:57:14.333 回答
0

看到故事板中没有显示您的弹出框(如果我正确阅读了您的帖子),我认为您需要将弹出框视图添加为代码中的子视图。就像是:

[self addSubview:_numberPickerPopover];

可能有几个地方可以做到这一点。可能在你的 textFieldShouldBeginEditing: 方法中最有意义,在你初始化它之后。

于 2013-05-24T20:12:04.457 回答
0

这只是一个想法,但是当弹出框执行弹出框时,我认为它会成为第一响应者,但是您的文本视图是第一响应者......所以它可能无法过度......如果这是错误然后在你告诉弹出窗口出现之前你可以说 [textView resignFirstResponder]; 看看是否有帮助....这只是一个想法,虽然不是 100% 肯定我必须做一些测试~

还要检查 _numberPicker 是否不是 nil

于 2013-05-24T20:07:50.037 回答