使用Google登录使用用户信息填充表格视图

时间:2015-07-03 16:17:00

标签: ios objective-c google-oauth google-signin

我尝试使用Google登录中的用户信息填充tableview。

以下是我试图填充的表格视图的一部分。基本上,名字,姓氏和电子邮件:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  long section = [indexPath section];
  long row = [indexPath row];

  if (section == 0) {
  // Section: Details
  if (tableView.editing) {
  if (row == 0) {
    // Row: First Name
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FirstNameCell"];
    cell.detailTextLabel.text = manager.currentAccount.firstName;
    return cell;
  } else if (row == 1) {
    // Row: Last Name
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LastNameCell"];
    cell.detailTextLabel.text = manager.currentAccount.lastName;
    return cell;
  } else if (row == 2) {
    // Row: Email
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"EmailCell"];
    cell.detailTextLabel.text = manager.currentAccount.email;
    return cell;

    ...

我相信我检索用户信息的方法是:

- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error {
     // Perform any operations on signed in user here.
     NSString *userId = user.userID;                  // For client-side use only!
     NSString *idToken = user.authentication.idToken; // Safe to send to the server
     NSString *name = user.profile.name;
     NSString *email = user.profile.email;
     // ... 

我只是不知道如何填充表格视图。或者,这应该由Google登录自动完成吗?

3 个答案:

答案 0 :(得分:0)

我假设您在manager.currentAccount

中登录后保存用户数据

您需要在委托方法中单步处理后刷新表视图,因为签名是在异步模式下完成的。所以你的

 - (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user
     withError:(NSError *)error 

应该是这样的:

- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error {
    if (error == nil) {
        // Populating data to manager.currentAccount from (GIDGoogleUser *)user
        // ....
        // ....

        [self.tableView reloadData];
    }   
}

答案 1 :(得分:0)

当您收到谷歌数据存储时,该数据在一个数组中。 之后,只需在数据存储在数组中的方法中重新加载表

你的表格结构应该是这样的

#pragma matk table delegates
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return array.count;
}

尝试创建自定义单元格以显示您从Google登录中提取的信息

下面是样本自定义单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTournamentsTableCell *cell = (MyTournamentsTableCell *)[tableView dequeueReusableCellWithIdentifier:[MyTournamentsTableCell reuseIdentifier]];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"MyTournamentsTableCell" owner:self options:nil];

      }
 return  cell;

}

您可以在此处详细了解如何在表格单元格上显示数据

show data on table

table view tutorial

答案 2 :(得分:0)

从您的评论到答案,您似乎在TableView内有UIViewController

要解决此问题,您可以尝试:

  • TableView UIViewController
  • 中为tableView创建一个IBOutlet
  • TableView' s dataSourcedelegate设置为UIViewController
  • 由于您只想从firstName方法获取lastNameemailtableView:numberOfRowsInSection: 返回3
  • [self.tableView reloadData]放在signIn:didSignInForUser:方法

希望这有帮助。