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

Add action to button in .xib file Using Swift(4.0)

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

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

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

托比,希望我帮到了你。

此外,如果这不起作用、不是您想要实现的目标或措辞不当,请评论它是什么,我会尝试修复它。

调用这个函数并传递你想跳转的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),对于第三个 xib,位置将是 CGPoint(x:200,y:0),考虑每个 xib 宽度为 100

setContentOffset 用于滚动特定 location/point。

更多检查Link