如何使用 FBFriendPickerViewController 设置最大好友数?

Posted

技术标签:

【中文标题】如何使用 FBFriendPickerViewController 设置最大好友数?【英文标题】:How to set a max number of friends using FBFriendPickerViewController? 【发布时间】:2013-03-04 15:03:16 【问题描述】:

我一直在与 Facebook 合作制作多人游戏。我想让玩家能够从 Facebook 邀请他的朋友参加比赛,所以我为此使用了 FBFriendPickerViewController。但是,我想将所选朋友的数量限制为最少 1 个玩家,最多 4 个。

问题是没有明显的方法可以做到这一点,或者至少在 Facebook 的开发者文档中没有提到。我试图在里面防止这种情况

- (void)friendPickerViewControllerSelectionDidChange:(FBFriendPickerViewController *)friendPicker

但是由于属性 NSArray *selection 是只读的,所以不能这样做。我也曾想过在用户选择朋友并单击“完成”按钮后警告用户,但让他选择 100 个朋友然后警告他关于 4 名玩家的最大限制有点蹩脚。

有人知道怎么做吗?还是我必须从头开始实现一个完整的 FBFriendPickerViewController?

谢谢! :D

【问题讨论】:

【参考方案1】:

一种解决方法是在选择器上显示标签/消息,让用户知道他们最多可以选择 4 个朋友。然后在选择四个之后关闭视图控制器?然后你可以添加这样的代码:

- (void)friendPickerViewControllerSelectionDidChange:
      (FBFriendPickerViewController *)friendPicker

    if ([friendPicker.selection count] > 3) 
        UIAlertView *alertView = 
            [[UIAlertView alloc] initWithTitle:@""
                                       message:@"Max number of friends selected."
                                      delegate:self cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
        [alertView show];
    


- (void)alertView:(UIAlertView *)alertView 
   clickedButtonAtIndex:(NSInteger)buttonIndex

    [self dismissModalViewControllerAnimated:YES];

您可能正在寻找更好的体验,例如让用户有机会从他们的最大列表中进行编辑。在这种情况下,您可以从 GitHub tableView:didSelectRowAtIndexPath: 和 tableView:didDeselectRowAtIndexPath: FBGraphObjectTableSelection 类中的委托方法获取源代码。看起来您可能会添加一个新的“maxSelection”属性并关闭它。

【讨论】:

谢谢。我发现关闭控制器有点苛刻,但这似乎是使用 FBFriendPickerViewController 执行此操作的唯一方法。我正在认真考虑用 UITableView 创建一个新的 UIViewController,就像现在大多数流行的游戏一样。谢谢! @C Abernathy 据我所知,FBGraphObjectTableSelection 类在 Facebook SDK 中是不公开的,那么如何修改它呢?完美的将是一个类别,但它需要一个 .h 文件,这比修改和重新打包的框架要好得多......我想。还有其他解决方案吗?【参考方案2】:

以前的 SDK 是基于 html 并托管在 facebook 上的,但 SDK 3.x 是开源的原生 ios 代码。

您可以修改 Facebook SDK。它在 Apache 许可下获得许可,并增加了您允许邀请的朋友的限制。

【讨论】:

【参考方案3】:

仅删除好友选择器不是解决方案!但这是! 折腾了好几下,终于明白了。

解决方案比我想象的要简单。 你friendPickerController 是一个tableView,所以我们可以将userInteractionEnabled 属性设置为NO

- (void)friendPickerViewControllerSelectionDidChange:
(FBFriendPickerViewController *)friendPicker

    if ([friendPicker.selection count] <=3)
    
        self.friendPickerController.tableView.userInteractionEnabled=YES;
    

    if ([friendPicker.selection count] >=3)
    
    UIAlertView *maxFriendsAlert =
    [[UIAlertView alloc] initWithTitle:@"Max number of friends selected."
                               message:@"no more friends can be selected,"
                              delegate:self cancelButtonTitle:@"OK"
                     otherButtonTitles:@"Buy more friends",nil];
    [maxFriendsAlert show];
    maxFriendsAlert.tag=1;

// disable friends selection
        self.friendPickerController.tableView.userInteractionEnabled=NO;
    

【讨论】:

【参考方案4】:

回复有点晚了,但我只是在寻找解决这个问题的方法,我发现比列出的其他解决方案更干净一些:

- (void)friendPickerViewControllerSelectionDidChange:(FBFriendPickerViewController *)friendPicker 
  if ([friendPicker.selection count] > 3) 
    friendPicker.doneButton.enabled = NO;
    [[[UIAlertView alloc] initWithTitle:@"Too many selections"
                                message:@"You may only select up to 3 friends."
                               delegate:nil
                      cancelButtonTitle:@"Ok" otherButtonTitles:nil] show];
   else 
    friendPicker.doneButton.enabled = YES;
  

我通知用户他们已经超过了最大值(通过 UIAlertView),然后我禁用了“完成”按钮。当计数恢复到有效数字时,我重新启用“完成”按钮。

【讨论】:

以上是关于如何使用 FBFriendPickerViewController 设置最大好友数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?