Как перейти на пользовательскую страницу из UIScrollView

#ios #swift #uipagecontrol

Вопрос:

Ссылка на Github — https://github.com/dnlatt/iOS/tree/master/MobileDataUsage2

  1. Я извлек данные из основных данных и передал их в MobileDataUsageViewController.swift.
 
let detailVC = segue.destination as! MobileDataDetailsViewController
        detailVC.selectedYear = year
        detailVC.years = years
        detailVC.coreDataYears = coreDataYears

 
  1. На этой странице я хочу показать все данные в формате слайдера.
 
 override func viewDidLoad() {
        super.viewDidLoad()
        pageControl.numberOfPages = coreDataYears.count
        pageControl.backgroundColor = .systemBlue
        pageControl.currentPage = 1
        scrollView.delegate = self
        
        pageControl.addTarget(self, action: #selector(pageControlDidChange(_:)) , for: .valueChanged)
        view.addSubview(scrollView)
        view.addSubview(pageControl)
        
    }

 
  1. Как я могу получить доступ к индексу массива основных данных? Например, из таблицы, если пользователь выберет «2018», мне нужно перейти на страницу 2 и показать результат со страницы 2. Я могу задать номер страницы в событии Управления просмотром страницы.

Если я нажму на 2018 год с первого экрана, это всегда приведет к результату данных за 2019 год. Я хочу установить правильную страницу и перейти на правильную страницу. Как я могу получить индекс selectedYear: Year! от coreDataYears: [Year] = [] и перейти на правильную страницу. Я могу установить переменную в приведенном ниже параметре

 pageControl.currentPage = 1
 

введите описание изображения здесь

Сейчас показывается только результат 2019 года, который является первым.

введите описание изображения здесь

  1. Если я провожу пальцем по странице, она всегда застревает внизу. Как я могу исправить макет пользовательского интерфейса ? Также в пользовательском интерфейсе есть дополнительная прокрутка.

введите описание изображения здесь

Комментарии:

1. В вашем вопросе много кода. Пожалуйста, не могли бы вы попытаться найти способ просто предоставить соответствующий код для вашей проблемы. Нравится… где ваш код выбора/навигации?

2. Эм… вы говорите в названии, что используете a UITableView , но ваш код-это просто a UIScrollView , который вы выкладываете вручную? Было бы гораздо разумнее использовать фактический UITableView . Как только это будет сделано, вся ваша проблема исчезнет.

3. Ты делаешь все это намного сложнее, чем должно быть.

4. Хмм… Я думаю, что вам, возможно, было бы лучше использовать a UIPageViewController для достижения того, что вы делаете. Есть UITableView, который показывает годы. Затем, нажав, вы можете перейти к UIPageViewController тому, у которого будет текущий контроллер просмотра только в течение одного года. Но пусть контроллер просмотра страниц сможет перемещаться в сторону к предыдущему/следующему году. С этим вы даже можете управлять страницей. Таким образом, вы можете сохранить каждый отдельный контроллер небольшим, т. е. только данные за один год. Но создайте полную функцию из нескольких контроллеров.

5. @Fogmeister, большое спасибо. Это спасет мне жизнь. Удалось завершить с вашим предложением.

Ответ №1:

Githublink — https://github.com/dnlatt/iOS/tree/master/MobileDataUsage3

Решена эта проблема путем рефакторинга кода с помощью UIPageViewController. Подробности в приведенной выше ссылке на Github.

Комментарии:

1. Отлично! Рад, что у тебя все получилось 👍 🏻