Jonathan BadeenのクラスJLBPartialModalを使用する新しいアプリを使用しています。このクラスは、ナショナル ジオグラフィックのパーク ガイドのインターフェイスを模倣しようとしています。
私の問題はこれです.2番目のビューでキーボードを表示しようとすると、最初にこれが発生するとすべてがうまく見えます.2回目に問題が発生し、キーボードは小さくなりますが、元のサイズで動作します.
初めて http://i.stack.imgur.com/kByhh.png
二度目 http://i.stack.imgur.com/GNhbL.png
2番目のビューにbecomeFirstResponderを強制する方法があるかどうかはわかりません。
私の問題を解決するための提案があれば幸いです。
最初のビュー
View はIBActionを使用して呼び出されます
-(IBAction)accion:(id)sender{
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
composeViewController *vc = [sb instantiateViewControllerWithIdentifier:@"composeView"];
JLBPartialModal *partialModal = [JLBPartialModal sharedInstance];
partialModal.delegate = vc;
[partialModal presentViewController:vc dismissal:^{
}];
}
セカンドビュー
このクラスには、didPresentPartialModalView の 1 つである 3 つのデリゲートがあり、ビューとアニメーションの終了後にキーボードを表示するためにこのデリゲートを使用しています。
#pragma mark - Partial modal delegate
- (void)didPresentPartialModalView:(JLBPartialModal *)partialModal
{
self.texto.editable = YES;
[self.texto becomeFirstResponder];
}
次に、ユーザーが [閉じる] ボタンをタッチすると、UITextView に rejectFirstResponder があり、NSNotificationCenterを使用すると、キーボードが非表示になっていることがわかります。
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(KeyboardWillHide:) name:UIKeyboardDidHideNotification object:nil];
}
- (IBAction)close:(id)sender
{
self.texto.editable = NO;
[self.texto resignFirstResponder];
}
-(void)KeyboardWillHide:(NSNotification *) notification {
[[JLBPartialModal sharedInstance] dismissViewController];
}
- (BOOL)shouldDismissPartialModalView:(JLBPartialModal *)partialModal
{
return YES;
}
ありがとうございました。
編集
ついに!
removeOnCompletionをJLBPartialModal.mに追加して問題を解決しました。
- (CAKeyframeAnimation *)pullBackAnimation
- (CAKeyframeAnimation *)pushForwardAnimation
このような:
- (CAKeyframeAnimation *)pullBackAnimation
{
CATransform3D startTransform = [self perspectiveTransform];
CATransform3D endTransform = CATransform3DConcat([self windowScaledTransform], startTransform);
CATransform3D middleTransform = CATransform3DConcat([self windowRotationTransform], startTransform);
CAKeyframeAnimation *anim = [self windowAnimation];
anim.values = @[[NSValue valueWithCATransform3D:startTransform], [NSValue valueWithCATransform3D:middleTransform], [NSValue valueWithCATransform3D:endTransform]];
anim.removedOnCompletion = YES; // Line added
return anim;
}
- (CAKeyframeAnimation *)pushForwardAnimation
{
CATransform3D endTransform = [self perspectiveTransform];
CATransform3D startTransform = CATransform3DConcat([self windowScaledTransform], endTransform);
CATransform3D middleTransform = CATransform3DConcat([self windowRotationTransform], startTransform);
CAKeyframeAnimation *anim = [self windowAnimation];
anim.values = @[[NSValue valueWithCATransform3D:startTransform], [NSValue valueWithCATransform3D:middleTransform], [NSValue valueWithCATransform3D:endTransform]];
anim.removedOnCompletion = YES; // Line added
return anim;
}
これで、アニメーションが削除されたことを確認します:D