我的UIButton
中显示了UIViewController
。此按钮通过xib(touchUpInside)
- (IBAction)messagesButtonPressed:(id)sender {
ChatsViewController* chatsVC = [[ChatsViewController alloc] initWithNibName:@"ChatsViewController" bundle:nil];
[self.navigationController pushViewController:chatsVC animated:YES];
}
我注意到在临时挂起UI的登录操作期间,如果用户反复点击此按钮,则当登录操作完成时,此事件将被触发TWICE。这导致以下结果:
nested push animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
此外,当我从此视图返回时,我最终会在同一页面上显示可见状态/导航栏和黑色内容区域。此时再次单击后退按钮会导致崩溃。
根据我的理解,iOS在无响应期间排队交互,这可能是导致此行为的原因。我添加的解决方法只是禁用IBAction中的用户交互并在viewWillAppear
中重新启用。 e.g。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// ...
[self.messagesButton setUserInteractionEnabled:YES];
}
- (IBAction)messagesButtonPressed:(id)sender {
[self.messagesButton setUserInteractionEnabled:NO];
ChatsViewController* chatsVC = [[ChatsViewController alloc] initWithNibName:@"ChatsViewController" bundle:nil];
[self.navigationController pushViewController:chatsVC animated:YES];
}
是否有更安全的方法来阻止这种多点触控?
编辑:我应该提到我已经尝试启用exclusiveTouch,并且在登录完成后也无法重现这一点,无论我按下此按钮多快,UI都恢复正常。
答案 0 :(得分:0)
对我来说似乎很奇怪,你有能力点击"聊天"您没有登录时按钮。
如果您在登录过程完成之前禁用用户互动,那么解决不了吗?
userInteractionEnabled
是合适的。
答案 1 :(得分:0)
您问题的简单解决方案是
一旦登录请求被触发,你应该禁用该按钮,
如果请求成功,则推送到另一个视图,如果失败,则启用登录按钮
答案 2 :(得分:0)
在更改状态之前检查isSelected
属性os按钮。
如果“未”选中,则进行设置。因此管理你的cdoe。