我正在尝试创建一个提醒,当提出时会询问用户是否要从他们的图书馆中选择照片或拍照。我正在使用帖子UIPopover How do I make a popover with buttons like this?中的模板。模板是......
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'
。这个错误说的是什么,这是如何解决的?
答案 0 :(得分:2)
您可能会将发件人作为此函数的参数接收,其类型为id
,代表通用对象。编译器不知道它有一个名为bounds
的属性,因为它可能真的是任何对象。要解决此问题,您需要通过强制转换它来告诉sender
实际上是UIView *
。
UIView* senderView = (UIView *)sender;
然后你可以执行下一个任务:
popover.sourceView = senderView;
popover.sourceRect = senderView.bounds;
答案 1 :(得分:0)
问题在于您正在配置弹出窗口。
在警报控制器开始演示之前,UIKit框架不会创建def LabelPlate():
n = nuke.thisNode()
if n != None:
label = n['label'].value()
n['label'].setValue('Plate')
def LabelLook():
name= "Plate"
for node in nuke.allNodes():
if name == node.knob("label").value():
return True
def LabelLookTwo():
name= "Plate"
for node in nuke.allNodes():
if name == node.knob("label").value():
return node.knob("name").value()
def PlateColorspaceSet():
n = LabelLookTwo()
if nuke.toNode("n")["colorspace"].value() == "default (sRGB)":
nuke.toNode("n")["colorspace"].setValue("sRGB")
def LabelQuestion():
if LabelLook() != True:
if nuke.ask('Is this Read your main Plate?'):
LabelPlate()
PlateColorspaceSet()
nuke.addOnUserCreate(LabelQuestion, nodeClass = 'Read')
属性。它直到下一个显示更新周期才真正显示,所以不要担心它会先取消配置。
在出示警报控制器后进行配置,你应该没事。