3

我可以找到一些跳過打印用戶界面的代碼,並通過Air Printer直接打印,但代碼不完整。該代碼是下面,跳過IOS 8中的打印UI?

UIPrinterPickerController *printPicker = [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:self.savedPrinter]; 
    [printPicker presentAnimated:YES completionHandler: 
     ^(UIPrinterPickerController *printerPicker, BOOL userDidSelect, NSError *error) { 
     if (userDidSelect) { 
      self.savedPrinter = printerPicker.selectedPrinter; 
     } 
    }]; 

在該代碼中,提到self.savedPrinter。但是,我怎樣才能在這裏獲得保存的打印機。請給我一個完整的答案或樣本解決方案。

回答

8

我的問題,我問above.Here是解決方案的解決方案,

首先,你必須設置UIPrinterPickerController代表;即UIPrinterPickerControllerDelegate在您的班級。下一步是從UIPrinterPickerController中選擇打印機。所以你必須在你的方法中添加一些代碼。在我的設置視圖控制器中,我正在使用按鈕操作。

- (IBAction)btnSettingsTapped:(id)sender 
    { 
     //Search printer method. 
     [self searchForPrinters]; 
    } 

    - (void) searchForPrinters 
     { 
      // For checking the ios version is greater than ios 7.Because skipping the Printing UI is ony in ios8 and later. 
      if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) 
       { 
       UIPrinterPickerController *printPicker = [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:nil]; 
           [printPicker presentAnimated:YES completionHandler: 
           ^(UIPrinterPickerController *printerPicker, BOOL userDidSelect, NSError *error) 
{ 
    if (userDidSelect) 
     { 
      //User selected the item in the UIPrinterPickerController and got the printer details. 

     [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:printerPicker.selectedPrinter]; 

     //Here you will get the printer and printer details.ie, 
     // printerPicker.selectedPrinter, printerPicker.selectedPrinter.displayName, printerPicker.selectedPrinter.URL etc. So you can display the printer name in your label text or button title. 

     [btnSettingsPrint setTitle:printerPicker.selectedPrinter.displayName forState:UIControlStateNormal]; 

     NSURL *printerURL = printerPicker.selectedPrinter.URL; 

     } 
     }]; 
    } 
} 

如果你想在任何其他視圖,設置打印功能,您必須從存儲的URL存儲在打印機URL信息,並獲取打印機對象,其他意見。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:[printerURL absoluteString] forKey:@"yourKey"]; 
[defaults synchronize]; 

現在你可以告訴你的UIPrintInteractionController直接調用printToPrinter(打印:completionHandler :)與保存的打印機,而不是使用本methods.You的一個可以調用您的按鈕操作的方法。

//Printing item details passed to this method, 
-(void)printYourItem :(NSData*)data 
{ 
    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) 
    { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    UIPrinter *currentPrinterObj = [UIPrinter printerWithURL:[NSURL URLWithString:[userDefault stringForKey:@"yourKey"]]]; 

    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController]; 

    if(currentPrinterObj) 
     { 
      [controller printToPrinter:currentPrinterObj completionHandler:^(UIPrintInteractionController *printController, BOOL completed, NSError *error) 
       { 
       if(completed) 
       { 
       } 
       else 
       { 
        NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code); 
       } 
      }]; 
     } 
    } 
} 

我想,這是幫助您的需要。

+0

你在哪裏調用了這個方法 - (void)printYourItem:(NSData *)data –

+0

其中你正在傳遞像圖像或文檔或文本這樣的打印細節,請你解釋一下。 –

+0

你能解釋一下我兄弟嗎? –