Добавить действие к кнопке в файле .xib с помощью Swift (4.0) - PullRequest
0 голосов
/ 10 сентября 2018

Я реализовал горизонтальное (пейджинговое) слайд-шоу видов, создал отдельный 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 файл

Класс 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)!
    }

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

вызовите эту функцию и передайте 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 используется для прокрутки в определенном месте / точке.

Для дополнительной проверки Ссылка

0 голосов
/ 10 сентября 2018

Если я думаю, что вы спрашиваете, правильно, то сделайте это. (Кстати, я немного заржавел, поэтому, пожалуйста, не распинайте меня, если я ошибаюсь). Кроме того, я не знаю, где вы разрабатываете это, поэтому я предполагаю, что он находится в другом месте, чем main.viewcontroller. Если это не просто добавить кнопку и создать переход к содержательной странице.

  1. Создайте общедоступную переменную в функции createSlides и установите для нее слайд, на котором вы находитесь. Например: слайд 1. Когда второй слайд открыт, он должен обновить второй слайд второго варианта. Ради этого мы будем называть var test
  2. Добавить кнопку в ваш файл дизайна
  3. Добавьте @IBAction в viewcontroller. Это @IBAction должно быть связано с вашей кнопкой.
  4. внутри этого @IBAction создайте переход к содержимому, используя переменную, которую мы создали ранее. self.performSegue(withIdentifier: test, sender: self)
  5. В главном контроллере представления добавьте два сегмента из представления со слайд-шоу в контроллер представления с содержимым (при условии, что у вас есть только два слайда). Один переход должен называться slide 1 (то же имя, что и let, созданный в функции createSlides.) Второй должен называться slide 2 (по понятным причинам.)
  6. Теперь, когда ваша кнопка на слайде 1 нажата, она должна выполнить переходный слайд 1 и показать ваш основной контент

Надеюсь, я помог, Тоби.

Кроме того, если это не сработает, это не то, чего вы хотите достичь, или неправильно сформулировано, пожалуйста, прокомментируйте, что это такое, и я постараюсь это исправить.

...