Как мы можем использовать метод класса uiactivity - (void) PerformActivity в классе UIViewController?

Я создаю приложение для чтения статей для iPhone. Я застрял в некоторых проблемах. Я столкнулся с проблемой в социальных сетях. Я пробовал пару подходов. Первый подход

Мы используем Facebook sdk, чтобы поделиться ссылкой на статью, заголовком и изображением. В идеале, когда мы нажимаем на элемент активности Facebook в uiactivityviewcontroller, мой код Facebook SDK должен запускаться, но я не могу этого сделать.

Второй подход

Мы попытались использовать пользовательский элемент активности в uiactivityviewcontroller, и нам удалось создать собственный значок и дать действие тому, что является методом по умолчанию класса uiactivity (- (void) PerformActivity), но я хочу использовать этот метод в своем классе контроллера представления, где мы передаем ссылку на статью, заголовок и изображение по переходу.

вот мой код:

           #import "ysAPActivityIcon.h"
           #import <Social/Social.h>
           #import <FacebookSDK/FacebookSDK.h>
           @implementation ysAPActivityIcon

            - (NSString *)activityType { return @"it.albertopasca.myApp"; }
            - (NSString *)activityTitle { return @"Open Maps"; }
             - (UIImage *) _activityImage { return [UIImage imageNamed:@"iPad_jobs.png"];           }
             - (BOOL) canPerformWithActivityItems:(NSArray *)activityItems { return YES; }
             - (void) prepareWithActivityItems:(NSArray *)activityItems { }
              - (UIViewController *) activityViewController { return nil; }
              - (void) performActivity {
                         }
          // my view controller class:
            #import "ysAPActivityProvider.h"
            #import "ysAPActivityIcon.h"
              #import "ysDetailViewController.h"
             @interface ysDetailViewController() <UIWebViewDelegate,UIActivityItemSource>
           - (void) performActivity {

           FBLinkShareParams *params = [[FBLinkShareParams alloc] init];
         params.link = [NSURL URLWithString:@"https://www.youtube.com/watch?v=pa8lsBNG31c"];
        //    // If the Facebook app is installed and we can present the share dialog
         if ([FBDialogs canPresentShareDialogWithParams:params]) {

          // Present share dialog
          [FBDialogs presentShareDialogWithLink:params.link
                               handler:^(FBAppCall *call, NSDictionary *results,    NSError *error) {
                                  if(error) {
                                      // An error occurred, we need to handle the error
                                       // See: https://developers.facebook.com/docs/ios/errors
                                      NSLog(@"Error publishing story: %@", error.description);
                                  } else {
                                      // Success
                                      NSLog(@"result %@", results);
                                  }
                              }];

// If the Facebook app is NOT installed and we can't present the share dialog
            } else {
       // FALLBACK: publish just a link using the Feed dialog

// Put together the dialog parameters
       NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               @"YourStory", @"name",

                               nil];

// Show the feed dialog
           [FBWebDialogs presentFeedDialogModallyWithSession:nil
                                       parameters:params
                                          handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
                                              if (error) {
                                                  // An error occurred, we need to handle the error
                                                  // See:  https://developers.facebook.com/docs/ios/errors
                                                  NSLog(@"Error publishing story: %@", error.description);
                                              } else {
                                                  if (result ==   FBWebDialogResultDialogNotCompleted) {
                                                      // User canceled.
                                                      NSLog(@"User cancelled.");
                                                  } else {
                                                      // Handle the publish feed callback
                                                      //   NSDictionary *urlParams = [self parseURLParams:[resultURL query]];

                                                      //  if (![urlParams valueForKey:@"post_id"]) {
                                                      // User canceled.
                                                      NSLog(@"User cancelled.");

                                                      //    } else {
                                                      // User clicked the Share button
                                                      //         NSString *result =      [NSString stringWithFormat: @"Posted story, id: %@", [urlParams valueForKey:@"post_id"]];
                                                      //        NSLog(@"result %@", result);
                                                  }
                                              }

                                          }];

           }



      }

person Daljeet    schedule 20.08.2014    source источник


Ответы (1)


В файле .h вашего пользовательского UIActivity создайте необходимые переменные для заголовка, ссылки, изображения... Импортируйте файл заголовка UIActivity в файл реализации вашего ViewController и в методе действия кнопки создайте экземпляр класс. Допустим, заголовочный файл UIActivity называется customAct:

customAct *act = [[customAct alloc] init];

Затем используйте его для добавления данных в переменные в заголовочном файле:

act.titleString = @"Text you want to add"

А затем используйте эти переменные в методе PerformActivity.

Но если я правильно понял, вы пытаетесь поделиться на Facebook. UIActivityController по умолчанию дает вам возможность делиться в facebook, twitter, mail, message. Тем не менее, чтобы появилась кнопка обмена в Facebook, вы должны войти в настройки своей учетной записи facebook, то же самое для Twitter. С другой стороны, UIActivtyController не дает возможности делиться через WhatsApp, Instagram, ... для этого вам придется выполнять пользовательские действия.

person Georgio Sayegh    schedule 10.04.2015