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

问题描述 投票:0回答:2

我实现了视图的水平(分页)幻灯片放映,创建了单独的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文件

class Slide: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)!
    }
swift swift4 xib
2个回答
1
投票

如果我认为你的要求是正确的,那么就这样做吧。 (顺便说一句,我对此有点生疏,所以如果我错了请不要把我钉在十字架上)。另外我不知道你在哪里设计这个,所以我假设它与main.viewcontroller不同。如果不只是添加一个按钮并为内容页面创建一个segue。

  1. 在createSlides Func中创建一个public var并将其设置为您所在的幻灯片。例如:幻灯片1.当打开第二张幻灯片时,它应该更新两张幻灯片2。为此,我们将调用var测试
  2. 在设计文件中添加一个按钮
  3. 将@IBAction添加到viewcontroller中。这个@IBAction应该与你的按钮相关联。
  4. 在这个@IBAction中,使用我们之前创建的变量为内容创建一个segue。 self.performSegue(withIdentifier: test, sender: self)
  5. 在主视图控制器中,将带有slidshow的视图中的两个segue添加到具有内容的视图控制器中(假设您只有两个幻灯片)。一个segue应该被称为幻灯片1(与您在createSlides func中创建的名称相同。)第二个应该被称为幻灯片2(显而易见的原因。)
  6. 现在当按下幻灯片1中的按钮时,它应该执行segue幻灯片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)中的第一行,用于计算要在scrollview中移动的位置。例如:对于第一个xib位置将是CGPoint(x:0,y:0),对于第三个xib,位置将是CGPoint(x:200,y:0),考虑每个xib宽度为100

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

有关更多信息,请查看Link

© www.soinside.com 2019 - 2024. All rights reserved.