如何使用FBFriendPickerViewController设置最大数量的朋友?

时间:2013-03-04 15:03:17

标签: ios objective-c xcode facebook

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

问题在于没有明显的方法可以做到这一点,或者至少在Facebook的开发者文档中没有提及。我试图阻止这个

- (void)friendPickerViewControllerSelectionDidChange:(FBFriendPickerViewController *)friendPicker

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

有谁知道怎么做?或者我是否必须从头开始实现完整的FBFriendPickerViewController?

谢谢! :D

4 个答案:

答案 0 :(得分: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”属性并关闭它。

答案 1 :(得分:0)

以前的SDK是基于HTML的,并且在Facebook上托管,但SDK 3.x是具有开源的本机iOS代码。

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

答案 2 :(得分: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;
    }

答案 3 :(得分: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),然后我禁用了完成按钮。当计数返回到有效数字时,我重新启用完成按钮。