Objective c 在IOS 8中跳过打印UI?

Objective c 在IOS 8中跳过打印UI?,objective-c,printing,ios8,airprint,uiprintinteractioncntrler,Objective C,Printing,Ios8,Airprint,Uiprintinteractioncntrler,我可以找到一些跳过打印界面并通过空气打印机直接打印的代码。但是代码不完整。代码如下: UIPrinterPickerController *printPicker = [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:self.savedPrinter]; [printPicker presentAnimated:YES completionHandler: ^(

我可以找到一些跳过打印界面并通过空气打印机直接打印的代码。但是代码不完整。代码如下:

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

在这段代码中,提到了self.savedPrinter。但是我怎样才能在这里得到保存的打印机呢。请给我一个完整的答案或示例解决方案。

我得到了我上面问的问题的解决方案。这是解决方案

首先,您必须设置UIPrinterPickerController委托;ieUIPrinterPickerControllerDelegate。下一步是从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];
现在,您可以通过使用保存的打印机调用PrintTopPrinter(:completionHandler:)而不是使用当前的方法之一来告诉UIPrintInteractionController直接打印。您可以在按钮操作中调用该方法

//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);
               }
            }];
        }
   }
}

我想,这有助于您的需求。

您在哪里调用此方法-(void)printYourItem:(NSData*)数据在哪里传递图像、文档或文本等打印详细信息,请您进一步解释。您可以解释我吗兄弟。缺少此行:-[UIPrintInteractionController sharedPrintController]。printingItem=您的数据;