【问题标题】:Issue while trying to load a custom view from XIB inside a UIPageControl尝试从 UIPageControl 内的 XIB 加载自定义视图时出现问题
【发布时间】:2017-12-27 20:55:35
【问题描述】:

我正在尝试从 UIPageControl 中的 XIB 加载自定义视图,但在尝试实例化视图时得到 EXC_BAD_ACCESS。请指导我哪里出错了。

这是我的代码:

我有一个 VC,我有一个滚动视图和一个页面控件,通过情节提要添加。我想根据页面在页面控件内加载具有不同数据的视图。

自定义 XIB

我有一个自定义 xib,它有一个视图和一些标签和图像视图添加在相同的顶部,具有约束。 xib 文件已更新为使用自定义视图类,并且出口也已映射。

自定义视图

import UIKit

class EventPageControl: UIView {

    @IBOutlet weak var contentView: UIView!

    @IBOutlet weak var eventIcon: UIImageView!
    @IBOutlet weak var eventDescLabel: UILabel!


    class func instanceFromNib() -> UIView {

        let pageControl = UINib(nibName: "EventPageControl", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView

        return pageControl
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupView()
    }

    // MARK: - Private Methods

    // Performs the initial setup.
    fileprivate func setupView() {
        let view = viewFromNibForClass()
        view.frame = bounds
        view.autoresizingMask = [
            UIViewAutoresizing.flexibleWidth,
            UIViewAutoresizing.flexibleHeight
        ]
        addSubview(view)
    }

    // Loads a XIB file into a view and returns this view.
    fileprivate func viewFromNibForClass() -> UIView {
        let bundle = Bundle(for: type(of: self))
        //let bundle = Bundle(forClass: type(of: self))
        //let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
        let nib = UINib(nibName: "EventPageControl", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        return view
    }

}

视图控制器

    func configureScrollView() {
        // Enable paging.
        var scrollWidth : CGFloat = UIScreen.main.bounds.size.width - 20.0
        scrollView.isPagingEnabled = true

        // Set the following flag values.
        scrollView.showsHorizontalScrollIndicator = false
        scrollView.showsVerticalScrollIndicator = false
        scrollView.scrollsToTop = false

        // Set the scrollview content size.
        scrollView.contentSize = CGSize(width: scrollWidth * CGFloat(totalPages), height: scrollView.frame.size.height)

        // Set self as the delegate of the scrollview.
        scrollView.delegate = self

        // Load the view from the xib file and configure it properly.
        for i in 0...(totalPages - 1) {

            //let eventPageControl = EventPageControl.instanceFromNib()
            let eventPageControl = EventPageControl.init(frame: CGRect(x: 0, y: 0, width: scrollWidth, height: scrollView.frame.size.height))

//            update the event icon and event desc properties of the custom view here

            // Set its frame 
            eventPageControl.frame = CGRect(x: CGFloat(i) * scrollWidth, y: 0, width: scrollWidth, height: scrollView.frame.size.height)

            // Add the test view as a subview to the scrollview.
            scrollView.addSubview(eventPageControl)
        }
    }

例外

自定义视图代码函数-viewFromNibForClass()中let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView行的EXC_BAD_ACCESS

当我尝试使用let eventPageControl = EventPageControl.instanceFromNib(),而不是let eventPageControl = EventPageControl.init(frame: CGRect(x: 0, y: 0, width: scrollWidth, height: scrollView.frame.size.height)) ,在视图控制器中,它显示页面控件内的视图,但无法获取自定义视图内属性的句柄,因此我可以在视图控制器中更新它们。

请帮助我解决问题。如果您需要更多详细信息,请告诉我。

【问题讨论】:

  • @BaSha,你能帮忙吗?

标签: ios swift3 storyboard xib uipagecontrol


【解决方案1】:

如果在视图控制器中添加自定义视图的私有实例会发生什么?这是否能让您访问视图的属性..?

类似private let instanceOfEPC = EventPageControl()

【讨论】:

  • 我尝试在 configureScrollView 方法中进行如下更改,但它在相同的行号处给出了相同的异常。 //let eventPageControl = EventPageControl.instanceFromNib() let eventPageControl = EventPageControl() //let eventPageControl = EventPageControl.init(frame: CGRect(x: 0, y: 0, width: scrollWidth, height: scrollView.frame.size.height ))
猜你喜欢
  • 2012-05-08
  • 2020-07-06
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2017-02-05
相关资源
最近更新 更多