2016-08-22 29 views
0

私はUITableViewにすべてのセルにいくつかの値を設定しています。次に、ユーザーがセルの誰かをタップすると表示されるUIViewです。今私がしたいのは、ユーザーが複数のセルを選択してUITableViewをスクロールできるようにすることですが、UIViewが表示されると、何とかUITableViewが非アクティブになります。 UITableViewsetUserInteractionEnabledはどこでも無効になっているわけではないため、問題はありません。ユーザーがセルをタップしたときに表示されるコードは、UIViewです。ビューが表示されているときにUITableViewが非アクティブになる

if (communicationView.hidden) 
    { 
     [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationCurveEaseOut animations:^{ 
      CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
      [communicationView setFrame:CGRectMake(0, 0, 320, communicationView.frame.size.height)]; } 
     completion:^(BOOL finished) { 
      NSLog(@"Done!"); 
      communicationView.hidden=NO; 
      [self.contactsTblView setUserInteractionEnabled:YES]; 
     }]; 
    } 

助けてください。ありがとうございました。私はこれをしたい理由はここに

EDIT 1 は次のとおりです。セルをタップした時に提示されUIViewは、2つのオプションが含まれているユーザーが選択したが、彼はに別のビューを提示されて通信する場合、「コミュニケーション」と「キャンセル」 Skype、Emailなどの中から選択してください。クライアントの新しい要件に応じて、一度に複数の人に電子メールを送信して、複数のセルの選択を許可する必要があります。

+0

あなたが達成しようとしているのは、ビューがそれの上に置かれているときにテーブルビューと対話することができますか?どうしてそうするか ???とにかくあなたがそれを達成したいならば絶対に可能です:)あなたはもう少しあなたの必要性を説明してください: –

+0

@ SandeepBhandari-私は編集を追加しました。 – TKutal

+0

@TKutalあなたは私のソリューションを試してみませんか? –

答えて

1

を使用することができ、あなたが仲間に何ができるかです:)

問題:あなたは、ウィンドウにビューを追加すると 1.それは防ぎ、すべてのユーザーとの対話の受け付けを開始しますこのような相互作用を得るには、その下に表示します。したがって、tableViewの上にビューをロードして、このビューの下にあるセルをタップしようとすると、このようなタッチを受け取ることはありません:)

  1. UITableViewはビュー示されている:

いや、それはのUITableViewはまだ非常に多くのユーザー対話的であっても、それはすべてのタッチを受けることはありませんので、それは基本的に自分のタッチのいずれにも反応しません:)ません:)

どうすればテストできますか?

シンプルセットCGRect(0,0,self.tableView.frame.size.width,100)にごCommunicationViewのフレームとCommunicationViewによって覆われていないテーブルビューの枠をタッチすることでテーブルビューをスクロールしようと、それはまだ私はちょうど今、なぜ同じ:)

をテストした私を信じて:)スクロールそれは私の場合にはうまくいかないのですか?

私が考えることのできる唯一の可能性は、CommunicationViewが画面全体をカバーしている可能性があることです。あなたのcommunicationViewに背景色を設定し、画面全体をカバーしているかどうかチェックしてみてください:)

しかし、その上にビューがある場合、私は決してtableViewと対話できませんか?

絶対にあなたが

:)をすることができますが、ユーザーが正確にあなたのCommunicationView下にあるセルをタップすることを可能にするとします:)どのようにそれを行うことができます?ここで

はこれがどのように:)

必要なのは、UIViewのhitTestの方法:)

である私のTestViewに呼ばれるビューを作成し、フレームでself.view.windowしそれを追加していdidSelectRowAtIndexPathを(0,0、幅、200)

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let testView : MyView = NSBundle.mainBundle().loadNibNamed("MyView", owner: nil, options: nil)[0] as! MyView 
    testView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 200) 
    testView.backgroundColor = UIColor.redColor() 
    testView.belowTableView = self.tableView 
    self.view.window?.addSubview(testView) 
} 

今私のTestViewには、セルの数カバーしていますが、私は同様にそれらをタップします:)

ここではどのようなIジd。コールMYVIEWをすることができます:)

class MyView : UIView { 
    var belowTableView : UITableView? 

    override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { 
     let hitView = super.hitTest(point, withEvent: event) 
     return self.belowTableView 
    } 
} 

これは私のTestViewにクラスとして設定されます:)あなたは

一体何をやっているのUIViewのサブクラスを作成します?私がタップされるビューを返却する責任があるHitTestメソッドをオーバーライドしています :)それでは、ここでやっていることは、私はその下のtableViewを返す私の自己を返すというし、私のTestViewに上のタッチをキャプチャしていている:)

だから、私のIOSは、ユーザーがタップ/ tableViewに触れて、上にあるtestViewではないと信じるでしょう:)

私はどのようにボタンをタップしますか? シンプルなタッチポイントは、それがボタン内にある場合は、単に他に、上記のコードで計算hitView私はself.belowTableViewを返す:)

簡単ではありません返す:)ボタンの枠内にあるかどうHitTestメソッドがチェック:)修正それは:)あなたがまだ疑問を持っている場合、Lemmeは知っている:)

+0

私の長老は私がこの問題に苦しんでいることを知っていました。過去3時間は、(あなたが言及したように)tableViewをカバーする透明なレイヤーがあることがわかりました。詳細な説明をありがとうございます:) – TKutal

+0

@tkutal:あなたはいつも歓迎しています:)嬉しいことに問題は解決しました:) –

0

あなたはテーブルのタッチがコミュニケーションのタッチでキャンセルされています。 あなたはここで

if (communicationView.hidden) 
{ 
    [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationCurveEaseOut animations:^{ 
      CGSize screenSize = [[UIScreen mainScreen] bounds].size; 
      [communicationView setUserInteractionEnabled:NO]; 
      [communicationView setFrame:CGRectMake(0, 0, 320, communicationView.frame.size.height)]; 
     } 
     completion:^(BOOL finished) { 
      NSLog(@"Done!"); 
      communicationView.hidden=NO; 
      [self.contactsTblView setUserInteractionEnabled:YES]; 
     }]; 
} 
+0

これにより、 UIViewに表示されているアクションは – TKutal

+0

ですが、一度に1つがあなたの接触を受け取ります。あなたの必要に応じてカスタマイズを行う必要があります。 –

関連する問題