从服务打开浏览器

时间:2014-01-15 20:19:32

标签: ios objective-c uiviewcontroller uiwebview

我正在尝试将Instagram登录信息集成到我的应用中。我想要做的是打开一个浏览器(我正在考虑使用UIWebView)用户登录,我应该拦截UIWebView的重定向以获取我的access_token并关闭{{1} }。通过实现UIWebView并覆盖UIViewController方法,UIWebViewDelegate很容易做到这一点,但是我在服务类中实现了所有的instagram代码(所有类方法都是静态的)因此没有理由创建类的实例)并且我希望能够显示和关闭此服务的浏览器(无需访问viewController,因此无法将shouldStartLoadWithRequest:添加为子视图)。这有可能吗?如果可以的话怎么样?还有其他任何小节吗?

我正在尝试这样做,因为登录可能会弹出多个控制器,我不想在第n个地方复制相同的代码。

1 个答案:

答案 0 :(得分:0)

shouldStartLoadWithRequest是一种UIWebViewDelegate方法。您可以将它用作实现UIWebViewDelegate协议的任何类的实例方法 - 它不必是视图控制器!

我建议你让你的Instagram类实际启动(并使用实例方法而不是类方法)。然后在该类上实现UIWebViewDelegate。这将处理拦截重定向。

至于在屏幕上获取Web视图,也许您应该为您的instagram类定义一个委托协议(称为MyInstagramControllerDelegate或其他东西)。在此协议中,定义如下方法:

- (UIViewController*)viewControllerToPresentWebView;

除此之外,让自己成为一个用于显示网络视图的视图控制器,称为InstagramLoginWebViewController

然后,在您的Instagram课程中,当您需要提供网络视图时,请先拨打

UIViewController *presentingVC = [self.delegate viewControllerToPresentWebView]`

其次,您创建了InstagramLoginWebViewController。第三,您已经呈现VC呈现您刚刚实例化的Web视图控制器。

将所有这些结合在一起的最后一点是要记住,无论何时创建instagram类的实例,都需要设置其委托。