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