2015-07-06 3 views
0

Я пытаюсь создать предупреждение, которое, когда его воспитывают, спросит пользователя, хотят ли они выбрать фотографию из своей библиотеки или сделать снимок. Я работаю над шаблоном со страницы UIPopover How do I make a popover with buttons like this?. Шаблон ...Ошибка UIAlertController 'bounds' не найдена на объекте типа '__strong id'

UIAlertController * alertController = [UIAlertController alertControllerWithTitle: nil 
                      message: nil 
                    preferredStyle: UIAlertControllerStyleActionSheet]; 
[alertController addAction: [UIAlertAction actionWithTitle: @"Take Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    // Handle Take Photo here 
}]]; 
[alertController addAction: [UIAlertAction actionWithTitle: @"Choose Existing Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    // Handle Choose Existing Photo here 
}]]; 

alertController.modalPresentationStyle = UIModalPresentationPopover; 

UIPopoverPresentationController * popover = alertController.popoverPresentationController; 
popover.permittedArrowDirections = UIPopoverArrowDirectionUp; 
popover.sourceView = sender; 
popover.sourceRect = sender.bounds; 

[self presentViewController: alertController animated: YES completion: nil]; 

однако в popover.sourceRect = sender.bounds; Xcode дает мне ошибку, что государства Property 'bounds' not found on object of type '__strong id'. Что это за ошибка, и как это исправлено?

ответ

2

Вероятно, вы получаете отправителя как параметр этой функции с типом id, который обозначает общий объект. Компилятор не знает, что у него есть свойство с именем bounds, так как это действительно может быть любой объект. Чтобы исправить это, вам нужно сказать, что sender на самом деле UIView * путем его литья.

UIView* senderView = (UIView *)sender; 

Затем вы можете выполнить следующее задание:

popover.sourceView = senderView; 
popover.sourceRect = senderView.bounds; 
+0

Есть ли причина, по которой в связанной записи, что человек, разместивший этот шаблон, не включит это? –

+0

Тип, возможно, уже указан в аргументе функции, см. Http://stackoverflow.com/questions/19641751/property-tag-not-found-on-object-of-type-strong-id –

0

Проблема заключается в том, когда вы настройке поповер.

Рамка UIKit не создает свойство popoverPresentationController до тех пор, пока контроллер предупреждений не начнет презентацию. Он фактически не отображает его до следующего цикла обновления дисплея, поэтому не волнуйтесь, что он сначала не будет настроен.

Настройте после представления контроллера предупреждения, и все должно быть в порядке.

Смежные вопросы