【问题标题】:Unable to display popover in iOS from UITextField无法从 UITextField 在 iOS 中显示弹出框
【发布时间】:2013-05-25 04:57:14
【问题描述】:

我正在开发一个非常基本的应用程序,当用户在 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?
  • 不,我没有。我想我应该检查一下是否发生这种情况。
  • 我解决了这个问题,根本原因是我的 textFieldShouldBeginEditing 方法没有被调用。您能否将您的评论作为答案,以便我选择它?非常感谢分享。
  • 酷,完成,谢谢。 :)

标签: ios uitextfield uipopovercontroller uitextfielddelegate


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    还要检查 _numberPicker 是否不为零

    【讨论】:

      【解决方案3】:

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

      [self addSubview:_numberPickerPopover];
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        • 2011-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多