【发布时间】:2018-04-27 23:15:43
【问题描述】:
我有一个嵌入了UITableView 的UIViewController。这个表格视图的高度是整个屏幕的 3/4。 UIViewController 的剩余 1/4 有一个舍入的 UIButton,它在父视图之上触发一个新的 UIView。 (UITableView)。
在实例化和调用背景设置为的UIView 时:
self.backgroundColor = UIColor(black: 1, alpha: 0.5) 它通常会用黑色透明背景填充整个视图,然后会有一个额外的 UIView 具有以下约束:
Leading: 10
Trailing: 10
Top: 50
Bottom: 50
这反过来又给了我在tableView 之上的“卡片”效果。然后,此“卡片”视图有一个 UITextview 属性,当用户点击嵌入了 textview 的视图时,该属性应该显示键盘。
问题:
在选择UITextview,或者甚至触摸这个“卡片”视图时,背景表被选中并与之交互。 'Card' 文本字段既不会抬起键盘,也不会使自己完全交互,因为父表控制器似乎正在获取触摸事件。
在 iOS 11 中遇到的这个问题有什么解决方案吗?我从未在 iOS 10 中遇到过这个问题。我正在使用 iPhone X 来进一步说明我的问题。
这是实际问题的示例。
注意:如果我选择卡片本身的黑暗区域,表格视图将接收触摸事件,但卡片视图中的文本区域不会接收。此卡片视图显示键盘的原因是我使用 textview.becomeFirstResponder 方法在代码中手动调用它。
附加说明:我还在整体呈现子视图上启用了isUserInteractionEnabled = false。仍然不起作用,父视图只接收触摸。
卡片代码
class Card: UIView {
// instantiating the textview
var textview = UITextview()
var cardView = UIView()
private override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor(black: 1, alpha: 0.5)
self.cardView.backgroundColor = UIColor.white
self.cardView.layer.cornerRadius = 8
// Just demo the textview
self.textview.frame = CGRect(x: 10, y: 100, width: 300. height: 100)
self.addSubview(cardView) // adding the cardView as a subview to the background colored view
cardView.addSubview(textview)
}
required init?(coder aDecoder: NSCoder) {
fatalError("Error")
}
private func ConstrainCardWith() {
// Constraints
}
}
extension UIView {
func Width()-> CGFloat {
return UIScreen.main.bounds.size.width
}
func Height()-> CGFloat{
return UIScreen.main.bounds.size.height
}
}
【问题讨论】:
-
请添加一些代码:)
-
你好像在设置 layer.z 位置
-
isUserInteractionEnabled在子视图上将导致只有父级接收触摸。坏主意.. -
@incmiko 我不知道这一点。在 iOS 11 之前,我按照上述方式进行操作,但从未遇到过类似的问题。我的其他应用程序之一有这个问题。它是为 iOS 10 Swift 3 编写的。现在它也有问题:(
-
pastebin.com/KEy5ueEt 在 iOS 11 上仍然为我工作..
标签: ios iphone uitableview uiview