RCRTwitterAccountPicker 1.0.2

RCRTwitterAccountPicker 1.0.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Rich Robinson 维护。



  • Rich Robinson

这是一个 iOS 系统中 Twitter 账户的选择器界面:处理请求对 Twitter 的访问、向用户展示账户列表,并将用户选择的账户返回到您的代码中。

它是什么

虽然 iOS 使得通过 SLComposeViewController 发送推文变得非常简单,但当涉及到获取用户在设备上配置的 Twitter 账户列表时,它并不太有帮助。

RCRTwitterAccountPicker 提供了一种简单的方法,让您的应用获取代表用户想要使用的 Twitter 账户的 ACAccount 实例,无论您出于什么目的。

在配置了多个 Twitter 账户的设备上,RCRTwitterAccountPicker 会展示一个包含用户可能选择的账户列表的界面。可以使用一个现成的界面进行此操作,或者选择提供您自己的界面。

在只配置了一个账户的设备上,RCRTwitterAccountPicker 会直接返回账户,而无需用户从只有一个账户的“列表”中进行选择。

如果一个设备没有配置 Twitter 账户,或者用户拒绝了您的应用对 Twitter 的访问,那么这个信息会被相应地返回到您的调用代码中。

它依赖于什么

RCRTwitterAccountPicker 依赖于 Xcode 5 及更高版本(尽管请注意,示例项目是为 Xcode 6 设计的,需要修改以与 Xcode 5 兼容)。

RCRTwitterAccountPicker 已在 iOS 7 和 iOS 8 上进行了测试(请注意,示例项目是为 8 设计的,但也可以在 7 上运行)。

所有代码都使用 ARC。

请注意,RCRTwitterAccountPicker 本身不需要网络连接,因为所有操作都在设备上完成。但是,通过设置应用添加 Twitter 账户将需要一个有效的网络连接(当然,您的调用代码可能也需要)。

如何使用它

设置

首先,将 RCRTwitterAccountPicker 文件夹和代码添加到您的项目中。

基本使用:使用标准选择器视图控制器

选择器附带了您使用它所需的一切,包括用于列出Twitter账号并允许用户选择一个的视图控制器。在本节中,我们假设您希望保持简单,仅使用内置视图控制器(如果您想提供自己的自定义视图控制器,请参阅下一节)。

使用选择器的一种方法如下。

假设您想从您的应用程序的一个视图控制器中管理和运行选择器。首先,您需要一些导入

#import <Accounts/Accounts.h>
#import "RCRTwitterAccountPicker.h"

接下来,向您的视图控制器中添加选择器的属性

@property (nonatomic, strong) RCRTwitterAccountPicker *twitterAccountPicker;

然后,当您需要获取Twitter账号时,可以使用以下类似的代码

[self.twitterAccountPicker runPickerWithPresentingViewController:self completionHandler:^(BOOL granted, ACAccount *selectedAccount) {

    NSString *message;

    if (granted) {
        if (selectedAccount) {
            // We have an ACAccount instance representing the user's chosen Twitter account - we can now use this as we wish
            message = [NSString stringWithFormat:@"You selected Twitter account: %@", selectedAccount.username];
        }
        else {
            // selectedAccount is nil - there are no Twitter accounts configured on the device
            message = @"You do not have any Twitter accounts configured on this device";
        }
    }
    else {
        // granted is NO - the user has denied the app access to Twitter accounts
        message = @"You have not granted this app access to your device's Twitter accounts";
    }

    // This completion handler block will be run on an arbitrary queue, so we ensure we're on the main queue before updating the UI
    dispatch_async(dispatch_get_main_queue(), ^{
        [[[UIAlertView alloc] initWithTitle:@"Twitter Account Picker" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
    });
}];

请注意,我们向选择器传递了self的引用,因为选择器需要一个现有的视图控制器,以便从中展示自己的选择器视图控制器。

然后,我们使用completionHandler参数提供一个代码块供选择器准备返回值时运行。代码块的granted参数表示用户是否允许应用程序访问Twitter,而selectedAccount参数提供对表示用户已选择的Twitter账号的ACAccount实例的访问(如果没有在设备上配置账号,则为nil)。

如果grantedYES并且我们有selectedAccount,那么我们可以顺利进行。否则,我们会根据情况进行处理。

在本示例中,我们简单地显示一个警告,报告选择器的结果,如果我们成功地从选择器中获取账号,则显示Twitter用户名。

请注意,选择器的completionHandler不会承诺它在哪个队列上运行,因此更新UI(显示警告)时使用dispatch_async()

自定义使用:提供自己的视图控制器

首先,请注意,RCRTwitterAccountPicker目前旨在与具有XIB文件的视图控制器一起使用。如果您了解自己在做什么,当然可以在不需要XIB的情况下使用选择器,但这种使用方式在本指南中未详细说明。

提供自定义视图控制器有两种方式。第一种,也是最简单的一种,是创建一个继承自RCRTwitterAccountPickerViewController的子类,它有一个XIB文件,其视图包含一个表格视图。以下详细描述了这种情况。

第二种选择是让您的视图控制器遵守RCRTwitterAccountPickerViewController协议。这种方法最为灵活,不需要您子类化、使用XIB或甚至表格视图。虽然这里没有讨论这种方法,但请注意,RCRTwitterAccountPicker包含了完整的文档注释,其中提供了关于此类使用的详细信息。

假设您正在子类化RCRTwitterAccountPickerViewController并使用上面描述的包含表格视图的XIB,以下是使用您自定义视图控制器运行选择器的步骤。请注意,这些步骤假定您熟悉Objective C中的子类化,以及Interface Builder的使用。

  1. 创建一个继承自RCRTwitterAccountPickerViewController的子类,确保它有一个关联的XIB文件。
  2. 使用Interface Builder,以您喜欢的方式布局视图,唯一的要求是它必须有一个表格视图。
  3. 将表格视图的数据源和代理设置为您的自定义视图控制器(在Interface Builder中将是“文件所有者”)。
  4. 将表格视图链接到RCRTwitterAccountPickerViewController.h中的IBOutlettableView属性。
  5. 在视图控制器的init方法中,调用父类的initWithNibName:bundle:初始化器,并通过第一个参数传递XIB的名称。
  6. 在您的视图控制器中添加任何自定义代码,并根据自己的需求覆盖任何UITableViewDataSourceUITableViewDelegate方法。注意:如果您只需要一个自定义视图,可能没有必要在这里进行任何操作。
  7. 初始化选择器时使用initWithViewController:方法,通过参数传入您自定义视图控制器的一个实例。
  8. 完成!有关如何使用选择器以及处理其返回的结果的详细信息,请参阅前一节。

有关如何以这种方式使用自定义视图控制器运行选择器的有效示例,请参阅示例项目。

示例项目

RCRTwitterAccountPickerSample文件夹中可以找到一个展示基本和自定义使用Twitter帐户选择器的示例项目。

待办事项

未来计划实现的一些功能

  • 在不选择帐户的情况下取消选择器视图控制器。
  • 支持将选择器视图控制器推入导航控制器中(目前它是显示/消失的,并不是通过推送方式)。

许可证

MIT许可证(请在存储库根目录下的LICENSE文件中查看)。