2

Facebookの友達を選ぶ作業をしています。Facebookの友達ピッカーを起動するテキストフィールドにFacebookの友達の名前を表示したいと思います。

ありがとう!

また、ユーザーの文字列名を取得することと、オブジェクトを送信する友達を選択することには違いがありますか?それがユーザーが行うことだからです。したがって、ユーザー名の文字列値を表示する必要がありますが、オブジェクトをそのユーザーに関連付ける必要もあります。

-(IBAction)cancelList;
-(IBAction)submitList;
-(IBAction)datePicker;

@property (strong, nonatomic) IBOutlet UITextField *listFieldText;
@property (strong, nonatomic) IBOutlet UITextField *dateFieldText;
@property (strong, nonatomic) IBOutlet UITextField *wallPostText;
@property (strong, nonatomic) IBOutlet UITextField *friendsName;
@property (retain, nonatomic) UIDatePicker *pick;
@property (strong, nonatomic) UIImage *profilePic;

@property (retain, nonatomic) PF_FBFriendPickerViewController *friendPickerController;

実装:

- (void)textFieldDidBeginEditing:(UITextField *)sender
{
    sender.delegate = self;
    if([sender isEqual:dateFieldText])
    {
        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]
                                       initWithTitle:@"Save Date"
                                       style:UIBarButtonItemStyleDone
                                       target:self
                                       action:@selector(datePicker)];
        self.navigationItem.rightBarButtonItem = doneButton;
        pick = [[UIDatePicker alloc] init];
        [pick setFrame:CGRectMake(0,200,320,120)];
        //[pick addTarget:self action:@selector(done) forControlEvents:UIControlEventValueChanged];
        dateFieldText.delegate = self;
        dateFieldText.inputView = pick;
    }
    else if ([sender isEqual:friendsName])
    {
        NSLog(@"Pick a friend!");

        if (self.friendPickerController == nil) {
            // Create friend picker, and get data loaded into it.
            self.friendPickerController = [[PF_FBFriendPickerViewController alloc] init];
            self.friendPickerController.title = @"Select Friends";
            self.friendPickerController.delegate = self;
            self.friendPickerController.allowsMultipleSelection = NO;
        }
        [self.friendPickerController loadData];
        [self.friendPickerController clearSelection];
        [self presentModalViewController:self.friendPickerController animated:YES];

    }
    else{
        UIBarButtonItem *submitButton = [[UIBarButtonItem alloc]
                                         initWithTitle:@"Done"
                                         style:UIBarButtonItemStyleDone
                                         target:self
                                         action:@selector(submitList)]; //change this


          self.navigationItem.rightBarButtonItem = submitButton;

        }
    }

-(void)updateFriendTextField:(NSString*)subtitle
{
    friendsName.text = subtitle;
}

/*
-(void)updateSelections
{
    NSString* friendsSubtitle = @"Selected friends";
    id<PF_FBGraphUser> friend = [self.selectedFriends objectAtIndex:0];
    friendsSubtitle = friend.name;
    [self updateFriendTextField:friendsSubtitle];

    //[self handlePickerDone];
}
*/

-(void)friendPickerViewControllerDataDidChange:(PF_FBFriendPickerViewController *)friendPicker {
    NSLog(@"Current friend selections: %@", friendPicker.selection); 

}

- (void)dealloc
{
    friendPickerController.delegate = nil;
}

- (void)facebookViewControllerCancelWasPressed:(id)sender
{
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    NSLog(@"Friend selection cancelled.");
    //[self handlePickerDone];
}

- (void)facebookViewControllerDoneWasPressed:(id)sender
{

    NSLog(@"Done was pressed.");
    //[self updateSelections];
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
4

2 に答える 2

0

この答えには複数の解決策があります。

個人的には、グローバルヘッダーを使用するのが好きです。これは、私の観点からすると最も効率的だからです。

ヘッダーファイルを作成し、「global.h」という名前を付けます

そのヘッダーファイルで、次を作成します。

NSString* friendsName;
NSString* wallPostText;
NSString* dateFieldText;
NSString* listFieldText;

次に、単に呼び出すだけでアプリが最初に起動したときに、アプリデリゲートでこれらのオブジェクトを初期化しますfriendsName = @"friend";

後で実際に選択範囲から友達の名前を受け取ったら、その名前をそのグローバル変数friendsNameに保存します。

これらの変数にアクセスする必要があるすべてのクラスに「global.h」を#importすることを忘れないでください!

これを行う2番目の方法は、これらの変数にアクセスするクラスにローカル変数を作成することです。

@property(nonatomic) NSString *friendsName;

新しいUIViewControllerをプッシュするときは、次のように初期化の直後にパススルーできます。

ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];
viewControllerB.friendsName = "Mark";
[self pushViewController:viewControllerB animated:YES];

お役に立てれば!

于 2013-03-13T21:48:13.493 に答える
0

friendPickerViewControllerSelectionDidChangeデリゲートメソッド(または)の1つでfriendPicker.selectionから保存できますfriendPickerViewControllerDataDidChange

配列内のアイテムはPF_FBGraphUserオブジェクトであるため、それらを保存して、必要なものを使用できます PF_FBGraphUser

@property (retain, nonatomic) NSString *id;
@property (retain, nonatomic) NSString *name;
@property (retain, nonatomic) NSString *first_name;
@property (retain, nonatomic) NSString *middle_name;
@property (retain, nonatomic) NSString *last_name;
@property (retain, nonatomic) NSString *link;
@property (retain, nonatomic) NSString *username;
@property (retain, nonatomic) NSString *birthday;
@property (retain, nonatomic) id<PF_FBGraphPlace> location;
于 2013-03-20T00:23:03.397 に答える