2013-03-04 45 views
2

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

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

- (void)friendPickerViewControllerSelectionDidChange:(FBFriendPickerViewController *)friendPicker 

但作为属性NSArray *选择是只读的,它不能完成。在选好朋友并点击“完成”按钮之后,我也想过警告用户,但这让他选择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]; 
} 

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

+0

谢谢。我觉得解雇控制器有点苛刻,但似乎是使用FBFriendPickerViewController来做到这一点的唯一方法。我正在认真考虑使用UITableView创建一个新的UIViewController,因为大多数时下流行的游戏都是这样做的。谢谢! – 2013-03-07 22:09:52

+0

@C Abernathy我知道FBGraphObjectTableSelection类在Facebook SDK中不公开,所以如何修改它?完美的将是一个类别,但它需要一个.h文件,这会更好,然后修改和重新打包的框架... ...我想。有其他解决方案吗? – BootMaker 2013-07-22 06:58:03

+0

最好的办法是修改源代码并重新打包。 – 2013-09-10 16:00:14

0

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

您可以修改Facebook SDK。它根据Apache许可证进行许可,并为允许邀请的朋友添加限制。

0

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

解决方案比我想象的更简单。 you 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; 
    } 
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),然后我禁用完成按钮。当计数回落到有效数字时,我重新启用完成按钮。

相关问题