2016-05-02 10 views
1

私はチャットアプリケーションで作業しています。私はスクロールするときにtableviewをリロードしたくありません。スクロール中にテーブルビューの再読み込みを無効にする

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

     @try { 

      static NSString *[email protected]"cell"; 
      MessageCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
      if(cell==nil) 
      { 
       cell=[[MessageCell alloc]initMessagingCellWithReuseIdentifier:cellIdentifier]; 
      } 
      if(self.check) 
      { 
       cell.sent=YES; 
       cell.messageLabel.text=[self.sendArray objectAtIndex:indexPath.row]; 
      } 
      else 
      { 
       cell.sent=NO; 
       cell.messageLabel.text=[self.sendArray objectAtIndex:indexPath.row]; 
      } 
      [email protected]"27-04-2016"; 
      cell.backgroundColor=[UIColor clearColor]; 
      return cell; 
     } 
     @catch (NSException *exception) { 
     NSLog(@"Error in func:%s, line:%d with reason:%@",__func__,__LINE__,exception.reason); 

     } 

} 

私はそれを右に示したメッセージを送信する(self.checkYESである)、そして私はそれが左側に示したメッセージを受け取る(self.checkNOである)が、私はscrollingだときに問題があり、 tableviewは自分自身をリロードし、self.checkNOなので、左にメッセージ全体(送信または受信)を表示します。

どうしたらいいですか?

+0

self.checkは配列で、各行に固有の値でなければなりません。次のようにチェックすることができます:if(self.check [indexPath.row]) –

+0

self.checkは、そのメッセージが送信または受信されたことだけを検出するBOOLです。 –

+0

はい、しかし、あなたはself.checkが常にNOであると言っています。それは、あなたが自分の自己をチェックしていないように見えるからです。 cellForRowAtIndexPath:が呼び出されるたびにself.checkをチェックするか、self.checkの配列に各行の特定の値を設定する必要があります。 –

答えて

0

isTableViewScrollingを設定Self.checkは、アレイと、それでなければなりません各行に固有の値でなければなりません。だからあなたはそれをチェックすることができます:

if(self.check[indexPath.row]) { 
    // Do something! 
} 

これはあなたを助けてくれてうれしいです。

1

MessageCellクラスでは、prepareForReuse()メソッドをオーバーライドしてすべてのフラグをリセットする必要があります。 tableviewをスクロールすると、構築されたセルが再利用されます。したがって、フラグも再利用されます。ここに例があります

override func prepareForReuse() 
{ 
    super.prepareForReuse(); 
    currencyCodeLbl.text = nil; 
    currencyNameLbl.text = nil; 
    isSelf = false; 
    flagImage.hnk_cancelSetImage(); 
    flagImage.image = nil; 
} 
0

まず、tableViewの状態を追跡するためにインスタンスプロパティを作成する必要があります。このプロパティの値に基づいて、テーブルビューをリロードしたりリロードしたりすることができます(コード内のどこで行ってもかまいません)。

@property (assign, nonatomic) BOOL isTableViewScrolling; 

誰かがscrollViewのデリゲートメソッドを使用することができますテーブルビューをスクロール/ドラッグしている場合を追跡するために:

scrollViewWillBeginDragging: 

scrollViewDidEndDecelerating: 

し、それに応じて

関連する問題