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

これは単なる考えですが、ポップオーバーがポップオーバーを行うと、ファーストレスポンダーになると思いますが、テキストビューはファーストレスポンダーです...だからやり過ぎないかもしれません....これがエラーなら次に、ポップオーバーを表示するように指示する前に、[textView rejectFirstResponder] と言うことができます。それが役立つかどうかを確認してください....それは単なる考えですが、100%確実ではありませんが、いくつかのテストを行う必要があります〜

また、_numberPicker が nil でないかどうかも確認してください。コントローラなしでポップオーバーを表示しようとするとどうなるかわかりませんが、それが問題かどうかはわかります

于 2013-05-24T20:07:50.037 に答える
0

ポップオーバーがストーリーボードに表示されていないのを見て(投稿を正しく読んだ場合)、ポップオーバービューをコードのサブビューとして追加する必要があると思います。何かのようなもの:

[self addSubview:_numberPickerPopover];

これを行う場所がいくつかある可能性があります。あなたがそれを開始した後、あなたの textFieldShouldBeginEditing: メソッドでおそらく最も理にかなっています。

于 2013-05-24T20:12:04.457 に答える