2017-11-14 8 views
1

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を私の問題のさらなるメモとして使用しています。

ここに実際に発生する問題の例を示します。

enter image description here

注:私はカード自体の暗い領域を選択した場合、テーブルビューには、カードビュー内のタッチイベントではなく、テキスト領域を受け取ることになります。このカードビューにキーボードが表示されている理由は、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 
} 
} 
+1

pls: – incmiko

+0

それはあなたがlayer.zの位置を設定しているように見える – incmiko

+0

'isUserInteractionEnabled'子ビューでは、悪い考え.. – Brandon

答えて

0

質問は、あなたのコンテナビュー(cardview)ので、あなたの子ビュー(のTextViewを)何のフレームを持っていないので、ちょうどそれが範囲外にあるタッチ原因となることができないですあなたのカードビューにいくつかのフレームを追加すると、この質問を解決します

+0

cardView自体がで拘束されていますこれは問題でしょうか? – DwellingNYC

+0

@DwellingNYCビューをプログラムで追加するときは、translatesAutoresizingMaskIntoConstraintsをfalseに設定する必要があります。そうでない場合、自動レイアウトが自動的に設定されます。したがって、この状況では、サイズが0であるカードビューを追加し、制約がゼロになるように設定します。 –

関連する問題