gpt4 book ai didi

iphone - 显示键盘时,表页脚 View 中的 UIButton 不响应触摸

转载 作者:行者123 更新时间:2023-11-29 13:37:56 25 4
gpt4 key购买 nike

我正在开发一个带有购物车的 iPhone 应用程序,我正在使用 UITableView 来显示购物车。每个项目都有一个单元格,-tableFooterView 设置为自定义 View ,为用户提供一个文本字段以验证其信用卡的 CVV 和一个按钮以完成结帐过程。

当用户点击 CVV 文本字段时,我会调整表格 View 的大小,以便键盘不会覆盖任何内容。

- (void)keyboardWillShow:(NSNotification *)n
{
// I'll update this to animate and scroll the view once everything works
self.theTableView.frameHeight = self.view.frameHeight - KEYBOARD_HEIGHT_PORTRAIT_IPHONE;
}

输入 CVV 后,用户可以点击完成键关闭键盘:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return NO;
}

所有这些都有效,但是,当键盘可见时,我的结账按钮(一个普通的 UIButton)不响应触摸事件。表格滚动,但从未触发按钮的 touchUpInside 事件。

一旦我点击“完成”并且键盘消失,结帐按钮将识别 touchUpInside 事件。

据我所见,似乎任何被键盘覆盖的按钮都不会响应我的触摸(即使它从键盘后面滚出),直到键盘被关闭。同一个 -tableFooterView 中从未被键盘覆盖的按钮在键盘可见时保持对触摸的响应。

在 iOS 5 和 iOS 4 上运行时的行为相同。

任何人都可以就可能发生的事情提供任何建议吗?或者对故障排除有什么有用的想法?

谢谢!

编辑 - 更新

实际上,tableFooterView 中被键盘覆盖的部分并没有响应触摸事件。在我的自定义 UIView 子类中,我实现了 -touchesBegan:withEvent: 并记录了触摸的发生。

在显示键盘之前,触摸 View 中的任何地方都会得到一条日志语句。但是,tableview 调整大小后,仅触摸 View 的上部会生成一条日志语句。

另外我刚刚意识到,一旦我将该部分滚动到可见,被键盘覆盖的 tableFooterView 部分就会变成包含 View 背景颜色的颜色。

最佳答案

我遇到了同样的问题。我认为这是 iOS 中的一个错误,但我发现了一个解决方法:


- (void)keyboardWillShow:(NSNotification *)note {
NSDictionary* userInfo = [note userInfo];

// get the size of the keyboard
NSValue *boundsValue = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [boundsValue CGRectValue].size; // screen size
CGFloat keyboardHeight;
if (self.interfaceOrientation == UIInterfaceOrientationPortrait ||
self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
keyboardHeight = keyboardSize.height;
} else {
keyboardHeight = keyboardSize.width;
}

// resize the view with the keyboard
__block CGRect origFrame = self.view.frame;
__block CGRect viewFrame = origFrame;
viewFrame.size.height -= keyboardHeight - ((self.tabBarController != nil) ? self.tabBarController.tabBar.frame.size.height : 0);
// Set the height to zero solves the footer view touch events disabled bug
self.view.frame = CGRectMake(origFrame.origin.x, origFrame.origin.y,
viewFrame.size.width, 0);
// We immediately set the height back in the next cycle, before the animation starts
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
self.view.frame = origFrame; // The original height
// start the animation
[UIView animateWithDuration:0.4 animations:^{
[self.view setFrame:viewFrame];
}];
});
}

诀窍是将 tableView 的高度设置为 0,并在下一个运行周期恢复到原来的高度。

这适用于 iOS 4.3 和 5.1。

关于iphone - 显示键盘时,表页脚 View 中的 UIButton 不响应触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com