Невозможно отобразить всплывающее окно в 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

Я создал UITextField в раскадровке и установил там делегата. Может ли кто-нибудь увидеть, что я делаю неправильно?

Заранее спасибо всем, кто ответит.


person syedfa    schedule 24.05.2013    source источник
comment
Вы проверили, что textFieldShouldBeginEditing вызывается?   -  person Wain    schedule 25.05.2013
comment
Нет, у меня нет. Я думаю, я должен проверить и увидеть, если это происходит.   -  person syedfa    schedule 25.05.2013
comment
Я решил проблему, и основной причиной этого было то, что мой метод textFieldShouldBeginEditing не вызывался. Не могли бы вы сделать свой комментарий ответом, чтобы я мог его выбрать? Большое спасибо, что поделились.   -  person syedfa    schedule 25.05.2013
comment
Круто, Готово, спасибо. :)   -  person Wain    schedule 25.05.2013


Ответы (3)


Убедитесь, что вызывается метод делегата textFieldShouldBeginEditing. Остальной код выглядит правильно.

person Wain    schedule 24.05.2013

Это просто мысль, но когда всплывающее окно делает всплывающее окно, я думаю, что оно становится первым ответчиком, но ваше текстовое представление является первым ответчиком... так что он может быть не в состоянии сделать это.... если это ошибка затем, прежде чем вы скажете всплывающее окно, вы можете сказать [textView resignFirstResponder]; и посмотрим, поможет ли это .... это просто мысль, хотя я не уверен на 100%, что мне придется провести некоторое тестирование ~

также проверьте, не равно ли _numberPicker nil, я не знаю, что произойдет, если вы попытаетесь отобразить всплывающее окно без контроллера, но вы можете увидеть, не в этом ли проблема

person A'sa Dickens    schedule 24.05.2013

Поскольку ваше всплывающее окно не представлено в раскадровке (если я правильно прочитал ваш пост), я думаю, вам нужно добавить представление всплывающего окна в качестве подпредставления в коде. Что-то типа:

[self addSubview:_numberPickerPopover];

Потенциально есть несколько мест, где это можно сделать. Вероятно, имеет смысл использовать метод textFieldShouldBeginEditing: после того, как вы его запустили.

person Noah Dyer    schedule 24.05.2013