2013-05-14 5 views
0

У меня есть UIPopover, что я создал несколько UITextFields программно. Если одно из полей UIText использовано, я хочу, чтобы UIDatePicker внутри точки UIPopoverController указывал на поле UIText, которое вызывало краны. Я могу получить тег, поэтому я знаю, какой CGRect вызвал кран; проблема в том, что я не могу заставить стрелку UIPopoverController указывать на этот конкретный прямоугольник.Как подключить UIPopover к CGRect, созданному программно

Вот код (INview: self.frame неверен, это только одна из вещей, которые я пробовал)

if(textField.tag == 1301 ) { // 'startTime' text field 

    UIViewController* popoverContent = [[UIViewController alloc] init]; //ViewController 
    UIView *popoverView = [[UIView alloc] init]; //view 
    popoverView.backgroundColor = [UIColor blackColor]; 

    UIDatePicker *datePicker=[[UIDatePicker alloc]init];//Date picker 
    datePicker.frame=CGRectMake(0,44,180,186); // 180,186 
    datePicker.datePickerMode = UIDatePickerModeTime; 
    [datePicker setMinuteInterval:15]; 
    [datePicker setTag:1310]; 
    [datePicker addTarget:self action:@selector(Result) forControlEvents:UIControlEventValueChanged]; 
    [popoverView addSubview:datePicker]; 

    popoverContent.view = popoverView; 

    innerPopoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 

    [innerPopoverController setPopoverContentSize:CGSizeMake(180,206) animated:NO]; 
    [innerPopoverController presentPopoverFromRect:CGRectMake(305, -190, 80, 35) // WRONG! TODO 
             inView:self.frame 
          permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

} 

CGRectMake имеет те же параметры (х, у, ш, ч), что UITextfield было создано с помощью. Ошибка, которую я получаю:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated:]: Popovers cannot be presented from a view which does not have a window.'

Возможно ли это, имея UIPopover внутри UIPopover?

+1

Pass 'self.view' для' INview: 'параметра (предполагая, что 'self' является контроллером представления. Также требуется, чтобы' self.view' уже отображался при представлении popover. Прочитайте ошибку. Это означает, что представление еще не было добавлено (представлено). – rmaddy

+0

Ошибка сборки : Свойство 'view' не найдено на объекте типа 'SubViewData *' (SubViewData - это контроллер вида, где первый U IPopover) – SpokaneDude

+0

Вам нужно передать 'UIView' в параметр' inView'. Это должен быть вид, с которого вы хотите отобразить popover. Параметр 'rect' должен относиться к этому виду. – rmaddy

ответ

0

Это должно быть так:

innerPopoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 

[innerPopoverController setPopoverContentSize:CGSizeMake(180,206) animated:NO]; 
[innerPopoverController presentPopoverFromRect:CGRectMake(305, -190, 80, 35) // WRONG! TODO 
            inView: SubViewData.view 
         permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

Если у вас есть тэг зрения, то сделать так:

UIView *tappedView=[SubViewData.view viewWithTag:yourTag]; 

innerPopoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 

[innerPopoverController setPopoverContentSize:CGSizeMake(180,206) animated:NO]; 
[innerPopoverController presentPopoverFromRect:CGRectMake(305, -190, 80, 35) // WRONG! TODO 
             inView: tappedView.superView 
          permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
+0

Закрыть, но не он ... получить ошибку сборки: ** Свойство 'view' не найдено на объекте типа 'SubViewData' ** – SpokaneDude

+0

«Тег» принадлежит UITextField, который находится в первом UIPпопереходе, а не в представлении который содержит popover ... – SpokaneDude

+0

Я попытался прикрепить datePicker к popoverView, но получил это сообщение об ошибке, из-за чего я полагаю, что у меня не может быть popover внутри popover ... может ли кто-нибудь проверить это? *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [UIPopoverController presentPopoverFromRect: inView: allowedArrowDirections: анимированные:]: всплывающие окна не могут быть представлены из представления, которое не имеет окна.' – SpokaneDude