2

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

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

- (void)friendPickerViewControllerSelectionDidChange:(FBFriendPickerViewController *)friendPicker

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

有谁知道如何做到这一点?还是我必须从头开始实现一个完整的 FBFriendPickerViewController?

谢谢!:D

4

4 回答 4

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”属性并关闭它。

于 2013-03-05T01:23:14.200 回答
0

只是删除朋友选择器不是解决方案!但这是!我明白了,在挣扎了好几次之后。

解决方案比我想象的要简单。你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;
    }
于 2013-06-06T10:42:56.430 回答
0

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

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

于 2013-03-04T16:06:39.270 回答
0

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

- (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),然后我禁用了完成按钮。当计数恢复到有效数字时,我重新启用“完成”按钮。

于 2014-05-13T08:44:55.307 回答