我们能否处理错误“无法将 BOOL 类型的值转换为预期的参数 UIiew”

Posted

技术标签:

【中文标题】我们能否处理错误“无法将 BOOL 类型的值转换为预期的参数 UIiew”【英文标题】:Can we handle the error "Cannot convert the value of type BOOL to expected argument UIiew" 【发布时间】:2016-11-25 09:28:25 【问题描述】:

我厌倦了试图弹出视图控制器并搜索每个地方,也尝试过自己。这个问题又来了,我很困惑下一步该怎么做

func showPopover(base: UIView)

    let storyboard : UIStoryboard = UIStoryboard(name: "Messaging", bundle: nil)
    if let viewController = storyboard.instantiateViewControllerWithIdentifier("PreferencesViewController") as?PreferencesViewController
    
        let navController = UINavigationController(rootViewController: viewController)
        navController.modalPresentationStyle = .Popover

        if let pctrl = navController.popoverPresentationController 
        
            pctrl.delegate = self

            pctrl.sourceView = base
            pctrl.sourceRect = base.bounds

            self.presentViewController(navController, animated: true, completion: nil)
        
    

我在从 UIBarButtons 中单击的任一操作中调用此方法

func optionChoosed(hello:Bool)

    if (hello)
    
        self.showPopover(hello)
    

它说 无法将类型 BOOL 的值转换为预期的参数 UIiew.. 我们可以解决这个问题还是我走错了方向。

【问题讨论】:

这里变量helloBool类型。您需要将View 传递给方法showPopover 你需要使用UIPopoverPresentationControllerDelegate方法来显示popOver 你能编辑我的代码并评论你想说什么吗? 好的,我将提供我的代码。你想在iPhoneiPad 中显示弹出框吗? 错误很明显——你在编码时犯了一个逻辑错误。不要将Bool 变量传递给showPopover 函数,而是传递对UIView 的引用。您正在使用这个UIView 作为源视图和源矩形。这显然不能是Bool 【参考方案1】:
class SHNewStylesViewController: UIViewController, UIPopoverPresentationControllerDelegate 

var popover: UIPopoverPresentationController? = nil


//MARK: - View life cycle

override func viewDidLoad() 
    super.viewDidLoad()



override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()



//MARK: - IBActions

@IBAction func showPopover(sender: AnyObject) 
    let genderViewController = storyboard!.instantiateViewControllerWithIdentifier("ViewControllerTwoIdentifier") as! ViewControllerTwo
    genderViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
    genderViewController.preferredContentSize = CGSize(width: 200.0, height: 400.0) // To change the popover size
    popover = genderViewController.popoverPresentationController!
    popover!.barButtonItem = sender as? UIBarButtonItem
    popover!.delegate = self
    presentViewController(genderViewController, animated: true, completion:nil)




//MARK: - Popover Presentation Controller Delegate methods

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle 
    return UIModalPresentationStyle.None



在我的例子中,showPopover 是我的条形按钮项目的IBAction。你可以在showPopover 方法中的任何你想要的地方编写代码。

谢谢:)

【讨论】:

以上是关于我们能否处理错误“无法将 BOOL 类型的值转换为预期的参数 UIiew”的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 黄屏死机 (YSOD) 能否按需生成或捕获?

Web 服务器能否在客户端发送完整请求之前开始响应?

我们能否直接从服务层抛出ResponseStatusException而不会在控制器级别抛出自定义异常和处理?

Polly断路器能否具有指数durationOfBreak?

Swift 中的 Error Handling

Spring中的统一异常处理