如何使用 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 提交?