使用Swift(4.0)向.xib文件中的按钮添加操作

时间:2018-09-10 10:18:43

标签: swift swift4 xib

我实现了视图的水平(分页)幻灯片放映,创建了单独的xib并与视图控制器集成在一起。幻灯片正在按预期方式工作,但我想向每个视图添加操作,以便从那里可以直接移至相应的主要内容页面。找到以下代码以实现幻灯片放映。

func createSlides() -> [Slide] {

        let slide1:Slide = Bundle.main.loadNibNamed("Slide", owner: self, options: nil)?.first as! Slide

        slide1.labelTitle.text = "Page1"

let slide2:Slide = Bundle.main.loadNibNamed("Slide", owner: self, options: nil)?.first as! Slide

        slide2.labelTitle.text = "Page2"

return [slide1, slide2]

幻灯片功能

func setupSlideScrollView(slides : [Slide]) {
        scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
        scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(slides.count), height: view.frame.height)
        scrollView.isPagingEnabled = true

 for i in 0 ..< slides.count {
        slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
        scrollView.addSubview(slides[i])
    }
}

XIB文件

类别幻灯片:UIView {

 @IBOutlet weak var labelTitle: UILabel!


    var onClickCallback: (() -> Void)?

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


    }

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

2 个答案:

答案 0 :(得分:1)

如果我认为您的要求是正确的,请执行此操作。 (顺便说一句,我对此有些生疏,所以如果我错了,请不要把我钉在十字架上)。我也不知道您在哪里设计这个,所以我假设它与main.viewcontroller不在同一个地方。如果不是,只需添加一个按钮并在内容页面上创建一个segue。

  1. 在createSlides Func中创建一个公共变量,并将其设置为您所在的幻灯片。例如:幻灯片1。打开第二张幻灯片时,应更新第二张幻灯片var。为此,我们将其称为var test
  2. 在设计文件中添加一个按钮
  3. 将@IBAction添加到视图控制器中。此@IBAction应该与您的按钮链接。
  4. 在此@IBAction内部,使用我们之前创建的变量为内容创建序列。 self.performSegue(withIdentifier: test, sender: self)
  5. 在主视图控制器中,将带有幻灯片的视图中的两个片段添加到带有内容的视图控制器中(假设您只有两个幻灯片)。一个名称应该称为幻灯片1(与您在createSlides函数中创建的let的名称相同。)第二个名称应该称为幻灯片2(出于明显的原因。)
  6. 现在,当按下幻灯片1中的按钮时,应该执行segue幻灯片1并显示您的主要内容

希望我能帮上忙,托比。

如果这行不通,不是您想要达到的目的或措辞不佳,请评论一下它是什么,我将尝试修复它。

答案 1 :(得分:0)

调用此函数,并在要跳转的位置传递pageIndex:

func jumpToView(_ index : Int) {
    let offset = CGPoint(x: view.frame.width * CGFloat(index), y: 0)
    scrollView.setContentOffset(offset, animated: true)
}

希望这是您正在寻找的东西。

函数let offset = CGPoint(x: view.frame.width * CGFloat(index), y: 0)中的第一行,用于计算要在滚动视图中移动的位置。例如:对于第一个xib位置将为CGPoint(x:0,y:0),对于第3个xib,位置将为CGPoint(x:200,y:0),请考虑每个xib宽度为100

setContentOffset用于在特定位置/点滚动。

有关更多信息,请检查Link