добавьте этот код (убедитесь, что вы включили UIPageViewControllerDelegate в свой заголовок или расширение класса и назначили self.pageViewController.delegate = self;
):
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers {
self.pageAnimationFinished = NO;
}
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
self.pageAnimationFinished = YES;
}
, затем проверьте self.pageAnimationFinished
и верните нуль, если это == NO
.
Дольше Объяснение:
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
Мы можем использовать этот метод делегата из UIPageViewControllerDelegate
знать, когда анимация перелистывает или проскакивает через страницы. Используя это, мы можем реализовать это следующим образом:
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
pageAnimationFinished = YES;
}
, тогда просто верните nil
в свои
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(PageViewController *)viewController
и
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(PageViewController *)viewController
когда
pageAnimationFinished == NO
. Обязательно установите pageAnimationFinished
на NO
, когда вы живете. Лучший способ узнать, когда вы живете, - это использовать противоположность
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
, а именно:
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers
С тех пор я не видел этого предупреждения, и это можно сделать в 1/3 линии, как и другие решения. И намного проще следовать.
Вот общее решение, использующее Только CSS , работоспособность которого я убедился.
@media print {
body * {
visibility: hidden;
}
#section-to-print, #section-to-print * {
visibility: visible;
}
#section-to-print {
position: absolute;
left: 0;
top: 0;
}
}
Альтернативные подходы не так хороши. Использование display
сложно, потому что если какой-либо элемент имеет display: none
, то ни один из его потомков также не будет отображаться. Чтобы использовать его, вы должны изменить структуру своей страницы.
Использование видимости
работает лучше, поскольку вы можете включить видимость для потомков. Однако невидимые элементы по-прежнему влияют на макет, поэтому я перемещаю section-to-print
в верхний левый угол, чтобы он печатал правильно.
Если Вы только хотите распечатать это отделение, необходимо использовать инструкцию:
@media print{
*{display:none;}
#mydiv{display:block;}
}
Вы могли использовать отдельный стиль CSS, который отключает любое содержание кроме того с идентификатором "printarea".
См. CSS Дизайн: Попытка Распечатать для дальнейшего объяснения и примеров.
Используйте специальную Таблицу стилей для печати
<link rel="stylesheet" href="print.css" type="text/css" media="print" />
и затем добавьте класс т.е. "noprint" к каждому тегу, который доволен, что Вы не хотите печатать.
В использовании CSS
.noprint {
display: none;
}
Все ответы до сих пор довольно испорчены - они или включают добавление class="noprint"
ко всему или испортят display
в #printable
.
я думаю, что лучшее решение состояло бы в том, чтобы создать обертку вокруг непечатаемого материала:
<head>
<style type="text/css">
#printable { display: none; }
@media print
{
#non-printable { display: none; }
#printable { display: block; }
}
</style>
</head>
<body>
<div id="non-printable">
Your normal page contents
</div>
<div id="printable">
Printer version
</div>
</body>
, Конечно, это не прекрасно, поскольку это вовлекает перемещающиеся вещи в Ваш HTML немного...
Вы могли использовать таблица стилей печати и использовать CSS для расположения содержания, которое Вы хотели распечатанный? Read эта статья для большего количества указателей.
гм... используйте тип stylsheet для печати..., например:
<link rel="stylesheet" type="text/css" href="print.css" media="print" />
print.css:
div { display: none; }
#yourdiv { display: block; }
С CSS 3 Вы могли использовать следующее:
body *:not(#printarea) {
display: none;
}
Я взял содержание с помощью JavaScript и создал окно, которое я мог распечатать в земельном участке...
Я нашел решение.
@media print {
.print-area {
background-color: white;
height: 100%;
width: auto;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index:1500;
visibility: visible;
}
@page{
size: portrait;
margin: 1cm;
}
/*IF print-area parent element is position:absolute*/
.ui-dialog,
.ui-dialog .ui-dialog-content{
position:unset !important;
visibility: hidden;
}
}
Give whatever element you want to print the id printMe
.
Include this script in your head tag:
Call the function
Print
Метод Сандро отлично работает.
Я настроил его, чтобы разрешить использование нескольких ссылок printMe, в частности, для использования на страницах с вкладками и расширении текста.
function processPrint (printMe) {
<- здесь вызывается переменная
var printReadyElem = document.getElementById (printMe);
<- удалены кавычки вокруг printMe, чтобы запросить переменную
Print
<- передача идентификатора div, который будет напечатан, в функцию, чтобы превратить переменную printMe в идентификатор div. одинарные кавычки необходимы
С jQuery это очень просто:
w=window.open();
w.document.write($('.report_left_inner').html());
w.print();
w.close();
]Это хорошо работает:[
] [<style type="text/css">
@media print
{
body * { visibility: hidden; }
#printcontent * { visibility: visible; }
#printcontent { position: absolute; top: 40px; left: 30px; }
}
</style>
]
[]Обратите внимание, что это работает только с "видимостью". "видимость" этого не сделает. Протестировано в FF3.[
].