2013-03-04 4 views
2

Я работал с Facebook, чтобы сделать многопользовательскую игру. Я хочу, чтобы игрок мог приглашать своих друзей из Facebook, чтобы играть в матче, поэтому для этого я использую FBFriendPickerViewController. Тем не менее, я хочу ограничить количество выбранных друзей до минимума из 1 игрока и максимальный из 4.Как установить максимальное количество друзей, используя FBFriendPickerViewController?

Проблема в том, что нет очевидного способа сделать это или, по крайней мере, ни одного упоминания в документах разработчика в Facebook , Я пытался предотвратить это внутри

- (void)friendPickerViewControllerSelectionDidChange:(FBFriendPickerViewController *)friendPicker 

но как атрибут NSArray * выбор только для чтения, это невозможно. Я также подумал о том, чтобы предупредить пользователя после того, как он выбрал друзей и нажал кнопку «Done'button», но это немного хромает, позволяя ему выбирать 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» и отпустите это.

+0

Спасибо. Я нахожу это довольно жестким, чтобы отклонить контроллер, но, похоже, это единственный способ сделать это с помощью FBFriendPickerViewController. Я серьезно подумываю о создании нового UIViewController с UITableView, как это делают большинство популярных игр в наши дни. Благодаря! –

+0

@C Abernathy Как я знаю, класс FBGraphObjectTableSelection не является общедоступным в SDK для Facebook, поэтому как его можно изменить? Идеал был бы категорией, но ему нужен файл .h, который был бы намного лучше, чем измененная и переформатированная структура ...Я полагаю. Есть ли другое решение? – BootMaker

+0

Лучше всего изменить исходный код и переупаковать. –

0

Предыдущий SDK был основан на HTML и был размещен на facebook, но SDK 3.x - это родной код iOS с открытым исходным кодом.

Вы можете изменить Facebook SDK. Он лицензируется по лицензии Apache и добавляет ограничение для друзей, которых вы разрешаете приглашать.

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; 
    } 
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), затем отключить кнопку «Готово». Когда счетчик вернется к действительному номеру, я снова включу кнопку «Готово».

Смежные вопросы