Я уже исследовал эту тему до смерти и нашел людей, которые публиковали один и тот же вопрос на нескольких веб-сайтах, включая здесь в stackoverflow.
Я перепробовал все предложения, ноне удалось получить UIDatePicker для фактического отображения.Кажется, не имеет значения, какой подход я выберу.Я попытался использовать модель наследования, в которой я делю подкласс UITextBox и переопределяю его методы по умолчанию, чтобы отобразить UIDatePicker, а затем я удостоверяюсь, что в StoryBoard я установил класс своего элемента управления UITextView в этот пользовательский класс.Я попытался программно сгенерировать UIDatePicker, а также попытался перетащить его на представление в StoryBoard.Когда я пытаюсь использовать программный подход, ничего не отображается, а когда я пытаюсь перетащить его на StoryBoard, он отображается ВСЕГДА.Когда я устанавливаю его атрибут «скрытый», он скрывается, но тогда я не могу отобразить его, даже когда пытаюсь добавить код в метод textboxDidBeginEditing
, который должен его показать.Я удостоверился, что установил свойство inputView UITextView равным моему элементу управления UIDatePicker.
Ничего не работает!Я не понимаю, почему Apple просто не сделала UIDatePicker одним из параметров по умолчанию в раскрывающемся списке Инспектора атрибутов для элемента управления UITextView.Это сделало бы это намного проще.
Ниже приведен фрагмент кода из моего файла классов реализации.
#import "AddTasksViewController.h"
@implementation AddTasksViewController
@synthesize dueDate;
@synthesize description;
@synthesize shortTitle;
@synthesize datePicker;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
self.dueDate.inputView = datePicker;
}
return self;
}
- (IBAction)dueDateDidBeginEditing:(UITextView *)textField
{
[textField resignFirstResponder];
[datePicker setFrame:CGRectMake(0,200,320,120)];
[datePicker addTarget:self action:@selector(done) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:datePicker];
}
Вот как выглядит мой заголовочный файл ...
#import <UIKit/UIKit.h>
@interface AddTasksViewController : UIViewController
@property (nonatomic, copy) IBOutlet UITextView *dueDate;
@property (nonatomic, copy) IBOutlet UITextView *description;
@property (nonatomic, copy) IBOutlet UITextView *shortTitle;
@property (nonatomic, retain) IBOutlet UIDatePicker *datePicker;
- (IBAction)doneEditing:(id)sender;
- (IBAction)dateChanged:(id)sender;
- (IBAction)dueDateDidBeginEditing:(UITextView *)textField;
@end
Как я уже упоминал, другой подход, который я выбрал (т.е. создание подкласса UITextView), тоже не сработал.Я скопировал предоставленный код здесь именно так, как это было показано.Затем я добавил в свой проект пользовательские классы с именем «DateField» (и заголовок, и файлы реализации), а затем заменил объявление UITextBox для dueDate на DateField в моих файлах AddTaskViewController.h и AddTaskViewController.m и убедился, что ссылки StoryBoardбыли обновлены, выбрав DateField для класса элемента управления в Identity Inspector.
Независимо от того, что я делаю, я не могу отобразить UIDatePicker после нажатия на UITextView.Когда я устанавливаю точку останова, она срабатывает по методу dueDateDidBeginEditing
, поэтому я знаю, что что-то срабатывает.Проблема в том, что я не понимаю, почему subView не отображается с помощью UIDatePicker.
Любая помощь будет принята с благодарностью, так как эта, казалось бы, простая задача, кажется, занимает гораздо больше времени, чем должна.Я мог бы делать такие вещи с закрытыми глазами и связанными руками за спиной в Java и C #, но все это так излишне сложно, когда дело доходит до Objective-C.Синтаксис действительно раздражает меня.
Так много квадратных скобок !!!Arghhhh !!!