写真を撮った後に表示される Instagram の共有ページのように、Twitter への共有を示すトグル ボタンを作成しようとしています。具体的には、状態で開始するのは UIButton でありNormal
、それを押すSelected
と、ユーザーの Twitter ハンドルをタイトルとして持つ状態になります。
最初のタップで、保存されている Twitter アカウントの ACAccountStore をチェックします。問題は、関数内の ACAccountStoreRequestAccessCompletionHandler の遅延requestAccessToAccountsWithType
です。ハンドラーで、Twitter ハンドルをセットアップし、ボタンを選択するように変更します。ただし、ボタンが選択された状態を視覚的に変更するには、長い時間がかかります。これは、呼び出し後に NSLog によって検証されたように、選択された状態にあるにもかかわらずです。
この遅延の原因がわかりません。これは、ボタンを処理するコードです。
- (IBAction)pressedTwitter:(id)sender {
UIButton *button = (UIButton*)sender;
if (button.selected) {
button.selected = !button.selected;
} else {
if (self.twitterAccount != nil) {
button.selected = !button.selected;
} else {
[self getTwitterAccount:button];
}
}
}
- (void)getTwitterAccount:(UIButton*)button
{
// Get Account
ACAccountStore *store = [[ACAccountStore alloc] init];
ACAccountType *twitterAccountType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
// Request permission from the user to access the available Twitter accounts
[store requestAccessToAccountsWithType:twitterAccountType options:nil completion:^(BOOL granted, NSError *error) {
if (granted) {
NSArray *twitterAccounts = [store accountsWithAccountType:twitterAccountType];
if ([twitterAccounts count] > 0) {
self.twitterAccount = [twitterAccounts objectAtIndex:0];
[self.twitterButton setTitle:self.twitterAccount.username forState:UIControlStateSelected];
[self setTwitterButtonNormalText:YES];
self.twitterButton.selected = YES;
NSLog(@"Twitter Button Selected");
self.statusLabel.text = @"Twitter Account Found";
} else {
[self setTwitterButtonNormalText:NO];
button.selected = NO;
NSLog(@"Not enough Twitter Accounts");
}
} else {
NSLog(@"Twitter Account Permission Not Granted");
[self setTwitterButtonNormalText:NO];
button.selected = NO;
}
}];
}
- (void)setTwitterButtonNormalText:(BOOL)accountAvailable
{
if (accountAvailable) {
[self.twitterButton setTitle:@"Twitter" forState:UIControlStateNormal];
[self.twitterButton setTitleColor:[UIColor colorWithWhite:0.5 alpha:1.0] forState:UIControlStateNormal];
} else {
[self.twitterButton setTitle:@"No Twitter" forState:UIControlStateNormal];
[self.twitterButton setTitleColor:[UIColor colorWithRed:125./255. green:21./255. blue:0 alpha:1] forState:UIControlStateNormal];
}
}
ご協力いただきありがとうございます。