iOS开发点滴-ShareSDK(iOS版)开发实践:自定义授权视图和分享视图导航栏

最近很多人问ShareSDK的授权视图和分享视图的导航栏样式与应用风格不一致,能否修改导航栏的样式?那么这里我就2.6.1版本进行说明(还在使用1.x版本的朋友建议升级到2.x版本,在新版本中可定制的东西比旧版本更多更灵活哦)。

     其实要修改导航栏需要在分享接口(showShareActionSheet或者showShareView中指定authOptions的viewDelegate和shareOptions中的shareViewDelegate参数。其中authOptions是授权相关的设置,而shareOptions则是分享相关的设置。那么这两个对象都可以通过ShareSDK相关方法进行初始化,如下面代码所示:

1 id<ISSAuthOptions> authOptions = [ShareSDK authOptionsWithAutoAuth:YES
2                                   allowCallback:NO
3                                   authViewStyle:SSAuthViewStyleFullScreenPopup
4                                   viewDelegate:self
5                                   authManagerViewDelegate:self];
1 id<ISSShareOptions> shareOptions = [ShareSDK defaultShareOptionsWithTitle:@"内容分享"
2                                     oneKeyShareList:[NSArray defaultOneKeyShareList]
3                                     qqButtonHidden:YES
4                                     wxSessionButtonHidden:YES
5                                     wxTimelineButtonHidden:YES
6                                     showKeyboardOnAppear:NO
7                                     shareViewDelegate:self
8                                     friendsViewDelegate:self
9                                     picViewerViewDelegate:nil];
     以上两段代码就是对authOptions和shareOptions的构造,那么authOptions中有一个参数叫viewDelegate,此参数是一个实现了ISSViewDelegate的协议对象。只要实现了ISSViewDelegate的对象都可以传入此参数。而shareOptions中有一个参数叫shareViewDelegate,此参数是实现了ISSShareViewDelegate的协议对象,而ISSShareViewDelegate是继承了ISSViewDelegate的,因此拥有ISSViewDelegate的所有委托方法,并且有自己的ShareViewDelegate的特有方法。

     那么对于需要修改导航栏样式来说,只要实现ISSViewDelegate的viewOnWillDisplay方法即可,也就是说在视图将要显示的时候来调整导航样式。我们可以在要显示分享视图的ViewController中实现ISSViewDelegate协议(注:如果分享界面也要调整样式,那么只要实现ISSShareViewDelegate即可)。我们这里要显示分享界面的是DemoViewController,那么在DemoViewController.h中修改代码如下:

1 @interface DemoViewController : UIViewController <ISSShareViewDelegate>
     然后转到DemoViewController.m文件,在类实现中写入下面代码:
1 - (void)viewOnWillDisplay:(UIViewController *)viewController shareType:(ShareType)shareType
2 {
3     [viewController.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"iPhoneNavigationBarBG.png"]];
4 }
     此委托方法中第一个参数就是将要显示的ViewController,如果是授权那么就是授权的ViewController,如果是分享那么就是分享的ViewController。在通过这个ViewController的navigationController可以取得导航控制器,然后在导航控制器中就可以去取到导航栏的对象了。那么就可以对导航栏进行调整了。

     委托方法实现后,然后传入到authOptions和shareOptions中(如最上面的代码所示),然后把authOptions和shareOptions传入分享接口即可。代码如下所示:

01 //弹出分享菜单
02     [ShareSDK showShareActionSheet:nil
03                          shareList:nil
04                            content:publishContent
05                      statusBarTips:YES
06                        authOptions:authOptions
07                       shareOptions:shareOptions
08                             result:^(ShareType type, SSResponseState state, id<ISSPlatformShareInfo> statusInfo, id<ICMErrorInfo> error, BOOL end) {
09                                 if (state == SSPublishContentStateSuccess) {
10                                     NSLog(@"分享成功");
11                                 }
12                                 else if (state == SSPublishContentStateFail) {
13                                     NSLog(@"分享失败,错误码:%d,错误描述:%@", [error errorCode], [error errorDescription]);
14                                 }
15                             }];
     编译一下看看是否有已经换成了自己的导航栏背景了呢?

     最佳实践:对于应用中如果多个地方有使用ShareSDK,那么可以创建一个独立的委托对象,专门针对样式作调整的,那么这样只要声明为全局的对象,就可以到处引用了。可以参考demo中的AGViewDelegate对象。


原文地址:http://my.oschina.net/vimfung/blog/148992

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值