Вот ответ http://wiki.python.org/moin/DictionaryKeys
Что пойдет не так, если вы попытаетесь использовать списки как ключи, с хэш, как, скажем, место их памяти?
Поиск разных списков с одним и тем же содержимым приведет к различным результатам, хотя сравнение списков с одним и тем же содержимым будет указывать на них как эквивалентные.
Как насчет использования литералов в словаре в словаре?
Ответ Майкла Даутермана совершенно прав, как показывает этот скринкаст:
Что вы видите, это контроллер просмотра страницы с несколькими страницами ( пронумерованы так, чтобы вы могли видеть порядок), каждая страница содержит кнопку «Далее», и я неоднократно нажимаю кнопку «Далее», чтобы перейти к следующей странице.
Как и ваш, мой проект, показанный на скриншоте выше , имеет иерархию контроллера представления:
Похоже, что суть вашего вопроса заключается не столько в том, какой метод заставляет контроллер просмотра страницы перейти на следующую или предыдущую страницу - как вы уже сказали, это просто setViewControllers:...
, но как кнопка связывается с иерархией контроллера представления. В моем примере это означает отправку сообщения с кнопки внутри представления страницы, мимо контроллера просмотра страницы, мимо UIPageViewController и до ViewController, который затем сообщает UIPageViewController, что делать.
Я могу подумайте о многочисленных способах этого:
tabBarController
), которое затем отправляет сообщение вниз в его текущий выбранный контроллер представления, ViewController parentViewController!.parentViewController!
, который является ViewController. Что я предпочитаю? Лично мне больше всего нравится ничтожное действие, потому что он не требует лишнего кода. Единственная реализация func pageNextButton()
находится в ViewController. Это красота действия nil-target: он поднимает цепочку ответчиков, ищет получателя, автоматически . Контроллер просмотра страницы и UIPageViewController вообще не имеют кода в этом отношении.
Мне нравится это намного лучше, чем parentViewController!.parentViewController!
, потому что последнее требует в конечном счете, чтобы контроллер вида страницы знал имя метода в ViewController, который он может вызывать, и он должен сбрасываться на ViewController, который не очень портативен и, по моему мнению, слишком много знает о своей среде. С другой стороны, с помощью ничтожного действия отправитель полностью агностик о том, кем будет реальная цель! Поэтому мне больше всего нравится действие nil-target, а второе - лучшее.
Вы можете использовать:
Для следующей страницы
pageViewController.setViewControllers(startingViewControllers,
direction: UIPageViewControllerNavigationDirection.Forward,
animated: true,
completion: nil)
Для предыдущей страницы
pageViewController.setViewControllers(startingViewControllers,
direction: UIPageViewControllerNavigationDirection.Reverse,
animated: true,
completion: nil)
Вы можете использовать setViewControllers:direction:animated:completion:
, чтобы программным образом перевернуть ваши страницы .
Просто пройдите по предыдущему или следующему контроллеру просмотра страницы, и все должно быть установлено.
setViewControllers:direction:animated:completion:
. Вам нужно прекратить спорить и начать слушать. У этого ничего i> есть кнопка, находящаяся внутри страницы внутри контроллера просмотра страницы. Вы все равно можете отправить сообщение.
– matt
1 November 2015 в 04:22
Вы можете использовать эту функцию:
func movePageToIndex(pageIndex NSInteger)->() {
var viewControllers = []
var direction : UIPageViewControllerNavigationDirection!
if (pageIndex < currentIndex) {
direction = UIPageViewControllerNavigationDirection.Reverse
} else {
direction = UIPageViewControllerNavigationDirection.Forward
}
viewControllers = @[[self.getItemController(pageIndex)]]
WEAKSELF weakSelf = self;
self.pageViewController.setViewControllers:viewControllers direction:direction animated:false completion:nil];
}
Swift 3.0
Очень простое решение здесь
Чтобы сменить страницу (UIViewController) из UIViewController, сначала получите экземпляр Parent ViewController (который будет UIPageViewController), а затем установите его текущий ViewController
В моем случае у меня есть UIPageViewController с именем «UserDetailsPVC» и он содержит 4 страницы (UIViewControllers), которые выглядят следующим образом
PageOneVC:UIViewController
PageTwoVC:UIViewController
PageThreeVC:UIViewController
PageFourVC:UIViewController
В UIPageViewController можно определить массив страниц
var pages:[UIViewController] = [
UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PageOneVC"),
UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PageTwoVC"),
UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PageThreeVC"),
UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PageFourVC")
]
Теперь, чтобы изменить страницу UIPageViewController с любого из UIViewController
// get parent view controller
let parentVC = self.parent as! UserDetailsPVC
// change page of PageViewController
parentVC.setViewControllers([parentVC.pages[1]], direction: .forward, animated: true, completion: nil)
setViewControllers:...
, как вы уже сказали несколько раз , Поэтому вы должны это сделать и принять один из ответов. – matt 1 November 2015 в 18:41parentViewController
и смотрите иерархию диспетчера, вам может потребоваться прочитать целую главу в контроллерах представлений: apeth .com / iOSBook / ch19.html – matt 2 November 2015 в 00:34