当前位置: 首页 > 知识库问答 >
问题:

以编程方式向子视图添加自定义UIViewcontroller,但获得错误消息“无法转换类型…的值”

漆雕博
2023-03-14

我试图以编程方式在Swift中向主ViewController添加自定义UIViewController类(UIPickerView)(不使用情节提要),但收到以下错误消息。。。

“无法将”HabitViewViewController“类型的值转换为预期的参数类型”UIView“

自定义UIPicker类:


    import UIKit

    class HabitViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate  {

        @IBOutlet weak var myPicker: UIPickerView!
        @IBOutlet weak var myLabel: UILabel!
        let pickerData = ["Mozzarella","Gorgonzola","Provolone","Brie","Maytag Blue","Sharp Cheddar","Monterrey Jack","Stilton","Gouda","Goat Cheese", "Asiago"]

        override func viewDidLoad() {
            super.viewDidLoad()
            myPicker.delegate = self
            myPicker.dataSource = self

        }
        //MARK: - Delegates and data sources
        //MARK: Data Sources

        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 1
        }

        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return pickerData.count
        }

        //MARK: Delegates

        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return pickerData[row]
        }

        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            myLabel.text = pickerData[row]
        }


        func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
            let titleData = pickerData[row]
            let myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 26.0)!,NSForegroundColorAttributeName:UIColor.blue])
            return myTitle
        }


        func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
            var pickerLabel = view as! UILabel!
            if view == nil {  //if no label there yet
                pickerLabel = UILabel()
                //color the label's background
                let hue = CGFloat(row)/CGFloat(pickerData.count)
                pickerLabel?.backgroundColor = UIColor(hue: hue, saturation: 1.0, brightness: 1.0, alpha: 1.0)
            }
            let titleData = pickerData[row]
            let myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 26.0)!,NSForegroundColorAttributeName:UIColor.black])
            pickerLabel!.attributedText = myTitle
            pickerLabel!.textAlignment = .center

            return pickerLabel!

        }




    }

主UI视图


    import UIKit

    // Activity Month view Class (Type BaseCell - cleaner)
    class PlantCell: BaseCell {


        // UIpicker for habit
        let habitPicker: HabitViewController = {

            let habit = HabitViewController()
            return habit
        }()


        // Overrided as it uses the baseCell superclass
        override func setupViews() {

            // Add subviews
            addSubview(habitPicker)

            // Horizontal constraints
            addConstraintsWithFormat(format: "H:|-[v0]-|", views: habitPicker)

            // Vertical constraints
            addConstraintsWithFormat(format: "V:|-250-[v0(20)]", views: habitPicker)


        }


    }

基室


    import UIKit

    // Superclass to initalise all base UICollectionView cells
    class BaseCell: UICollectionViewCell {
        override init(frame: CGRect) {
            // When dequeueReusableCell is called this init method is called if it needs a new cell
            super.init(frame: frame)
            setupViews()
        }

        func setupViews() {

        }

        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }

共有1个答案

何升
2023-03-14

addSubview(habitPicker)

预期的参数是UIView,因此您可以通过AddSubView(hibitPicker.view)简单地修复它。并且记住调整habitpicker.view帧大小合适。

 类似资料:
  • 我不知道这是否是搜索“在子视图中添加UIViewController”的正确键。正如您在我的图像中看到的,有两个ViewController,主控制器和第二个控制器。主控制器内部有一个UIView(蓝色背景色)。在UIView中,我想在UIView中添加第二个ViewController。我有这个代码,但不起作用。 这是我的密码 我想知道这是否可行?我知道在xib文件中工作,我不知道在google

  • 问题内容: 我们有一个测试套件,主要使用带有Hamcrest匹配器的JUnit断言。我们的一个团队开始对AssertJ进行实验,并以其语法,灵活性和声明性给人留下了深刻的印象。JUnit提供的一项功能是我无法在AssertJ中找到与之等效的功能:添加自定义断言失败消息。 我们经常在比较不是为了人类可读性而制成的对象,这些对象将具有随机查找的Id或UUID,并且无法通过包含的数据来判断它们应该是什么

  • 我们经常比较那些不是为了人类可读性而制作的对象,这些对象将具有随机的ID或UUID,并且不可能根据它们包含的数据来判断它们应该是什么。对于我们的代码库来说,这是一个不可避免的情况,可悲的是,它实现的目的之一是在其他服务之间映射数据,而不需要理解它是什么。 在JUnit中,方法提供的版本在参数之前带有参数。这使得添加一个简短的调试字符串变得微不足道,从而揭示了一些问题,比如比较对人类应该意味着什么。

  • 问题内容: python是否有将其他转换类型添加到字符串格式的方法? 在基于字符串的格式中使用的标准转换类型类似于字符串,十进制等。我想做的是添加一个新字符,我可以为此指定一个自定义处理程序(例如lambda函数),返回要插入的字符串。 例如,我想添加为一种转换类型,以指定应转义该字符串以便在HTML中使用。举个例子: 并将其用于产生以下输出: 问题答案: 您可以为html模板创建自定义格式器:

  • 问题内容: 我试图将视图控制器转换为详细视图控制器,但不能。我正在使用Core Data(第一次)。错误发生在prepareForSegue方法中,显示为:“无法将类型’UIViewController’(0x1b81cdc)的值强制转换为’Patternz.PatternDetailViewController’(0x32488)。(lldb)” 希望能解释为什么它不起作用。这是文件。 View

  • 问题内容: 我想列出UIViewController的传出脚本,如以编程方式枚举UIViewController的传出脚本所述,但在Swift中。(Swift 2,Xcode7,iOS8 +)。 我可以 并且产生像 但是之后我很难产生任何东西。我找不到的任何定义。我该如何说服Swift告诉我其中的内容?我如何找到segue? 谢谢! 问题答案: 这 是 UNDOCUMENTED 属性,是 UNDO

  • 我想创建一个产品从前端直接到一个分组的产品在WooCommerce。现在它正在“简单产品”中创建一个产品。 截图: 当前代码:

  • 安全测试人员声称,我应该清理返回的JSON(即转义这些符号),因为这可能会给旧的浏览器带来一些问题(即在浏览器中执行此JS代码)。 但是生成错误消息的是SpringBoot框架, 我在这里没有太多的控制权。 当然,我可以将参数定义为String,并自己进行验证,但我怀疑这是否是正确的方法。我的参数定义为Integer,我希望它保持这种方式。 做这件事最简单的方法是什么?