UIViewController
にはUITableView
が埋め込まれています。このテーブルビューは、画面全体の高さの3/4のサイズです。 UIViewController
の残りの1/4は、が親ビューの上に新しいUIViewをトリガーする丸いUIButton
を持っています。 (UITableView
)。チャイルドUIViewはタッチイベントを受信できません
Leading: 10
Trailing: 10
Top: 50
Bottom: 50
:それは、通常、次の制約を追加
UIView
を持つことになります黒のシースルーバックグラウンドでビュー全体を埋めるだろう
self.backgroundColor = UIColor(black: 1, alpha: 0.5)
:に設定された背景と
UIView
をインスタンス化して呼び出す際
これは、私にtableView
の上に「カード」効果を与えます。この「カード」ビューには、ユーザーがテキストビューを埋め込んだ状態でタップしたときにキーボードを表示することになっているUITextview
プロパティがあります。
問題: UITextview
を選択する、あるいはこの「カード」ビューに触れる際に、バックグラウンドテーブルには、選択とと相互作用しています。 「カード」テキストフィールドは、親テーブルコントローラがタッチイベントを受け取っているように見えるだけで、キーボードを持ち上げることも、それ自体をインタラクティブにすることもありません。
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
}
}
pls: – incmiko
それはあなたがlayer.zの位置を設定しているように見える – incmiko
'isUserInteractionEnabled'子ビューでは、悪い考え.. – Brandon