#ios #swift #uipagecontrol
Вопрос:
Ссылка на Github — https://github.com/dnlatt/iOS/tree/master/MobileDataUsage2
- Я извлек данные из основных данных и передал их в MobileDataUsageViewController.swift.
let detailVC = segue.destination as! MobileDataDetailsViewController
detailVC.selectedYear = year
detailVC.years = years
detailVC.coreDataYears = coreDataYears
- На этой странице я хочу показать все данные в формате слайдера.
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)
}
- Как я могу получить доступ к индексу массива основных данных? Например, из таблицы, если пользователь выберет «2018», мне нужно перейти на страницу 2 и показать результат со страницы 2. Я могу задать номер страницы в событии Управления просмотром страницы.
Если я нажму на 2018 год с первого экрана, это всегда приведет к результату данных за 2019 год. Я хочу установить правильную страницу и перейти на правильную страницу. Как я могу получить индекс selectedYear: Year!
от coreDataYears: [Year] = []
и перейти на правильную страницу. Я могу установить переменную в приведенном ниже параметре
pageControl.currentPage = 1
Сейчас показывается только результат 2019 года, который является первым.
- Если я провожу пальцем по странице, она всегда застревает внизу. Как я могу исправить макет пользовательского интерфейса ? Также в пользовательском интерфейсе есть дополнительная прокрутка.
Комментарии:
1. В вашем вопросе много кода. Пожалуйста, не могли бы вы попытаться найти способ просто предоставить соответствующий код для вашей проблемы. Нравится… где ваш код выбора/навигации?
2. Эм… вы говорите в названии, что используете a
UITableView
, но ваш код-это просто aUIScrollView
, который вы выкладываете вручную? Было бы гораздо разумнее использовать фактическийUITableView
. Как только это будет сделано, вся ваша проблема исчезнет.3. Ты делаешь все это намного сложнее, чем должно быть.
4. Хмм… Я думаю, что вам, возможно, было бы лучше использовать a
UIPageViewController
для достижения того, что вы делаете. Есть UITableView, который показывает годы. Затем, нажав, вы можете перейти кUIPageViewController
тому, у которого будет текущий контроллер просмотра только в течение одного года. Но пусть контроллер просмотра страниц сможет перемещаться в сторону к предыдущему/следующему году. С этим вы даже можете управлять страницей. Таким образом, вы можете сохранить каждый отдельный контроллер небольшим, т. е. только данные за один год. Но создайте полную функцию из нескольких контроллеров.5. @Fogmeister, большое спасибо. Это спасет мне жизнь. Удалось завершить с вашим предложением.
Ответ №1:
Githublink — https://github.com/dnlatt/iOS/tree/master/MobileDataUsage3
Решена эта проблема путем рефакторинга кода с помощью UIPageViewController. Подробности в приведенной выше ссылке на Github.
Комментарии:
1. Отлично! Рад, что у тебя все получилось 👍 🏻