2014-08-31 1 views
0

Я пытаюсь включить сканирование штрих-кода api в свое приложение ipad (XCode5, iOS7, Storyboards). Я не могу заставить его работать, хотя код выполнен. Для краткости полный код сканирования можно найти here. Проблема, как представляется, в этом кусочке кода из класса сканирования:Почему эта ошибка сборки при попытке подключить UIPopover к UIButton в другом классе?

// define the window 
_highlightView = [[UIView alloc] init]; 
_highlightView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin; 
_highlightView.layer.borderColor = [UIColor greenColor].CGColor; 
_highlightView.layer.borderWidth = 3; 
[self.view addSubview:_highlightView]; 

Я думаю мне нужно это UIPopover с небольшим UIView в нем, потому что на моем текущем UIView ничего не появляется. Так что это код, который я придумал:

UIViewController* popoverContent = [[UIViewController alloc] init]; 
UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 350, 500)]; 
popoverView.backgroundColor = [UIColor colorWithWhite:(CGFloat)1.0 alpha:(CGFloat)1.0]; // frame color? 
popoverContent.view = popoverView; 

//resize the popover view shown in the current view to the view's size 
popoverContent.preferredContentSize = CGSizeMake(350, 500); 

_highlightView = [[UIView alloc] init]; 
_highlightView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin; 
_highlightView.layer.borderColor = [UIColor greenColor].CGColor; 
_highlightView.layer.borderWidth = 3; 
[self.view addSubview:_highlightView]; 

// if previous popoverController is still visible... dismiss it 
if ([popoverController isPopoverVisible]) { 
    [popoverController dismissPopoverAnimated:YES]; 
} 

//create a popover controller 
DetailViewController *dvc = [[DetailViewController alloc]init]; 

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

[popoverController presentPopoverFromRect:dvc.oReadBarCode.frame 
           inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionUp 
          animated:YES]; 

Однако я получаю сообщение об ошибке сборки на последней строке, где я presentPopoverFromRect определение кнопки, чтобы прикрепить поповер к:

Popovers не может быть представленным с точки зрения, которая не имеет окна ».

Как исправить это? (Идея состоит в том, чтобы UIPopover отображал результаты сканирования).

ответ

1

Вам не нужно бросать рамку на кнопку ... плюс, ваши скобки, кажется, выключены.

Вы можете просто сделать это:

[popoverController presentPopoverFromRect:dvc.oReadBarCode.frame 
            inView:self.view 
       permittedArrowDirections:UIPopoverArrowDirectionUp 
           animated:YES]; 

Сам составитель жалоба (на будущее), кажется, потому что вы пытаетесь бросить на структуру к указателю, который не может быть сделано.

+0

Что вы будете делать, прежде чем перейти к этому коду? Чтобы предотвратить ошибку, оберните все в 'if (self.view.window) {/ * code * /}' – nhgrif

+0

Итак, весь этот код находится в 'viewDidLoad'? Переместите его в 'viewWillAppear:' или 'viewDidAppear:'. – nhgrif

+0

В представлении нет окна, пока оно не будет добавлено в качестве подсмотра для представления, которое имеет окно, или, если оно является свойством '.view' контроллера представления, тогда у него не будет окна в' viewDidLoad' (я думаю), у него не будет окна до 'viewWillAppear:' или 'viewDidAppear:'. – nhgrif