如何在UIView中使用Facebook SLComposeViewController而不是UIViewController

时间:2013-05-13 16:11:28

标签: iphone ios objective-c facebook

我在使用UIView中的Facebook SLComposeViewController时遇到问题。我遇到的问题是因为我有一个UIView而不是我继承的UIViewController。

我已导入:

#import <Social/Social.h>
#import <Accounts/Accounts.h>

我正在尝试使用以下方式展示Facebook分享:

 SLComposeViewController *controllerSLC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[controllerSLC setInitialText:@"First post from my iPhone app"];
[controllerSLC addURL:[NSURL URLWithString:@"http://www.test.com"]];
[controllerSLC addImage:[UIImage imageNamed:@"test.jpg"]];
[self presentViewController:controllerSLC animated:YES completion:Nil];

这是它不会呈现视图的最后一行,因为我继承自UIView而不是UIVIewController我不知道如何解决这个问题。我只是想分享一个图片。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

UIViews无法呈现视图控制器。您需要设置一种方法来回调呈现给UIView的UIViewController。

一种常见的方法是在视图上创建委托。当在该视图上发生某些事情时,将调用委托方法,该方法向实现您的委托方法的视图控制器发送消息。从那里,您可以从父视图控制器呈现视图控制器。

在你视图的.h文件中:

@protocol YourUIViewDelegate <NSObject>
- (void)theDelegateMethod;
@end

@interface YourUIView : UIView
@property (assign, nonatomic) id<YourUIViewDelegate> delegate;

在你的视图的.m文件中(我假设有一个按钮或其他一些被调用的动作方法,你想要呈现这个视图控制器):

- (void)buttonTapped:(id)sender
{
    [self.delegate theDelegateMethod];
}

在呈现委托方法的视图控制器.h中:

@interface ThePresentingViewController <YourUIViewDelegate>

在该视图控制器的.m文件中:

- (void)theDelegateMethod
{
    // All of the SLComposeViewController code
}

不要忘记将视图的委托设置为呈现视图控制器中的视图控制器。