- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用适用于 iOS 的 Facebook SDK 将 Facebook 登录添加到我的应用程序。
因为对Facebook服务器的请求可能需要一些时间,所以我想到使用MBProgressHUD。问题是 MBProgressHUD 和 FBRequest 都使用 block ,所以我期待一些奇怪的行为。
这是我使用的代码:
MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Loading";
HUD.minSize = CGSizeMake(135.f, 135.f);
[HUD showAnimated:YES whileExecutingBlock:^{
[FBSession openActiveSessionWithReadPermissions:@[@"email"] allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
if (error) {
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"error"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.detailsLabelText = error.localizedFailureReason;
HUD.labelText = @"Error";
}
if (state == FBSessionStateClosedLoginFailed) {
[FBSession.activeSession closeAndClearTokenInformation];
}
if (FBSession.activeSession.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (!error) {
//Save User's Data
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Logged in";
} else {
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"error"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.detailsLabelText = @"An error occurred, please retry later";
HUD.labelText = @"Error";
}
}];
}
}];
sleep(2);
} completionBlock:^{
//Return to previous page
}];
问题是,当我按下与此方法相关的按钮时,我会看到进度 HUD 不到一秒钟,然后我会返回到上一页。
我希望看到的是整个过程中HUD的显示。
有人可以告诉我该怎么做吗?
谢谢
最佳答案
问题是 showAnimated:whileExecutingBlock:
在 block 完成后立即关闭 HUD。 facebook 身份验证方法在后台执行代码并立即返回。相反,尝试只显示 HUD,并将其隐藏在 Facebook 完成 block 中。
-(void)yourMethodThatLogsIntoFacebook {
MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Loading";
HUD.minSize = CGSizeMake(135.f, 135.f);
[HUD show:YES];
[FBSession :@[@"email"] allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
if (error) {
[self updateHud:HUD withImage:@"error" text:@"Error" detailText:error.localizedFailureReason];
}
if (state == FBSessionStateClosedLoginFailed) {
[FBSession.activeSession closeAndClearTokenInformation];
}
if (FBSession.activeSession.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (!error) {
//Save User's Data
[self updateHud:HUD withImage:@"37x-Checkmark.png" text:@"Logged in" detailText:nil];
} else {
[self updateHud:HUD withImage:@"error" text:@"Error" detailText:@"An error occurred, please retry later"];
}
}];
}
}];
}
-(void)updateHud:(MBProgressHUD *)hud withImage:(NSString *)imageName text:(NSString *)text detailText:(NSString *)detailText {
hud.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
hud.mode = MBProgressHUDModeCustomView;
hud.labelText = text;
hud.detailText = detailText;
[hud hide:YES afterDelay:2.];
}
关于ios - MBProgressHUD + Facebook SKD : Nested blocks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092360/
我想使用原生 sdk 界面布局,(一个普通的应用程序如何)设计我的游戏菜单,并将其链接到 BaseGameActivity 或 GameScene,我知道如何使用 sdk 原生设计界面,但我不知道如何
首先,让我说 Android 支持库对我来说仍然有点吓人。我还不是专家。关于使用它们在 Lollipop 之前的设备上获得 api>=21 功能的文章很多,但是如果我的 minSdkVersion 是
我正在尝试对 apk 进行逆向工程,我想查看 SDK 和 NDK 文件。我尝试了多种方法,如 apktool 和在 android studio 中打开 apk,但都没有成功。此外,如果我编辑代码并重
我正在尝试使用适用于 iOS 的 Facebook SDK 将 Facebook 登录添加到我的应用程序。 因为对Facebook服务器的请求可能需要一些时间,所以我想到使用MBProgressHUD
我正在尝试熟悉 C++ 中的 Kinect 2.0 SDK,以便创建我自己的程序。但是,我对理解某些代码感到困惑。首先,当我试图追溯不同的结构声明时,我发现所有的函数都是虚拟的,我找不到它们实际定义的
我是一名优秀的程序员,十分优秀!