2012-03-21 3 views
4

Привет, У меня есть приложение iOS, которое имеет возможность распечатывать UITableView. Однако печатается только одна часть отображаемого таблицы. Есть ли способ распечатать весь tableview, даже если он еще не нарисован?Печать UITableView с содержимым с экрана?

Вот код, я использую для печати:

UIGraphicsBeginImageContext(self.mainTableView.contentSize); 
[self.mainTableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIPrintInteractionController *printer = [UIPrintInteractionController sharedPrintController]; 
printer.printingItem = viewImage; 
UIPrintInfo *info = [UIPrintInfo printInfo]; 
printer.printInfo = info; 
UIPrintInteractionCompletionHandler completionHandler = 
^(UIPrintInteractionController *pic, BOOL completed, NSError *error) { 
    if (!completed && error) 
     NSLog(@"FAILED! due to error in domain %@ with error code %u: %@", 
       error.domain, error.code, [error localizedDescription]); 
}; 
UIButton * printButton = (UIButton *)sender; 
if(UIUserInterfaceIdiomPad == [[UIDevice currentDevice] userInterfaceIdiom]){ 
    [printer presentFromRect:printButton.frame inView:self.view animated:YES completionHandler:completionHandler]; 
} else { 
    [printer presentAnimated:YES completionHandler:completionHandler]; 
} 

ответ

3

Есть много дискуссий об этой проблеме. Два примера:

SO: Screenshot from a UITableView

SO: How to take an iPhone screenshot of entire view including parts off screen

Проблема заключается в том, что UITableViews повторно использовать клетки. Я думаю, что наиболее распространенные подходы:

  1. Scroll программные к различным частям вашего UITableView, принимать различные скриншоты и объединить их вместе.
  2. Измените размер UITableView так, чтобы он был таким большим, чтобы все клетки в него вписывались. ПРЕДУПРЕЖДЕНИЕ: Это быстро приводит к проблемам с памятью (повторное использование ячеек больше не используется), поэтому просто сделайте это для целей скриншота и если количество ваших клеток не так велико.
Смежные вопросы