2011-01-18 26 views
1

selectRowAtIndexPathを動作させるのに問題があります。アニメーションを開始する前にselectRowForIndexPath関数を呼び出すと、それは問題のtableviewを反転させ、tableviewは要求されたようにtableview行を強調表示しません。実際、テーブルビューに何かをしても何の反応も出ないようです。何が問題なの?UITableView selectRowAtIndexPathは何もしません。

私はsetNeedsDisplayおよびその他のものも呼びましたが、機能は何もしていないようです。

- (void)setCurrentTAType:(MHAbstractTAParameter *)aoTAParameter sequenceNo:(NSInteger)aiSequence { 

    m_iSequence = aiSequence; 
    NSInteger iSelectedRow = 0; 

    if ([aoTAParameter isKindOfClass:[MHOverlayTAParameter class]]) { 
     m_iDisplayType = MHChartTADisplayOverlay; 
     [m_oTableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 

     MHOverlayTAParameter *oOverlayParam = (MHOverlayTAParameter *)aoTAParameter; 

     switch (oOverlayParam.iOverlayTAType) { 
      case MHChartOverlayNone: 
       iSelectedRow = 0; 
       break; 
      case MHChartOverlaySMA: 
       iSelectedRow = 1; 
       break; 
      case MHChartOverlayWMA: 
       iSelectedRow = 2; 
       break; 
      case MHChartOverlayEMA: 
       iSelectedRow = 3; 
       break; 
      case MHChartOverlaySAR: 
       iSelectedRow = 4; 
       break; 
      case MHChartOverlayBoll: 
       iSelectedRow = 5; 
       break; 
      default: 
       iSelectedRow = 0; 
       break; 
     } 


    } else { 

     m_iDisplayType = MHChartTADisplayUnderlay; 
     [m_oTableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 

     MHUnderlayTAParameter *oUnderlayParam = (MHUnderlayTAParameter *)aoTAParameter; 

     switch (oUnderlayParam.iUnderlayTAType) { 
      case MHChartUnderlayNone: 
       iSelectedRow = 0; 
       break; 
      case MHChartUnderlayVolume: 
       iSelectedRow = 1; 
       break; 
      case MHChartUnderlayRSI: 
       iSelectedRow = 2; 
       break; 
      case MHChartUnderlayMACD: 
       iSelectedRow = 3; 
       break; 
      case MHChartUnderlayMTM: 
       iSelectedRow = 4; 
       break; 
      case MHChartUnderlayROC: 
       iSelectedRow = 5; 
       break; 
      case MHChartUnderlayFastSTC: 
       iSelectedRow = 6; 
       break; 
      case MHChartUnderlaySlowSTC: 
       iSelectedRow = 7; 
       break; 
      case MHChartUnderlayWilliamPctR: 
       iSelectedRow = 8; 
       break; 
      case MHChartUnderlayOBV: 
       iSelectedRow = 9; 
       break; 
      case MHChartUnderlayPVT: 
       iSelectedRow = 10; 
       break; 
      case MHChartUnderlayDMI: 
       iSelectedRow = 11; 
       break; 
      case MHChartUnderlayVolumeP: 
       iSelectedRow = 12; 
       break; 
      case MHChartUnderlayTurnover: 
       iSelectedRow = 13; 
       break; 
      case MHChartUnderlayTurnoverP: 
       iSelectedRow = 14; 
       break; 
      case MHChartUnderlayVolatility: 
       iSelectedRow = 15; 
      default: 
       iSelectedRow = 0; 
       break; 
     } 
    } 

    NSIndexPath *oIndexPath = [NSIndexPath indexPathForRow:iSelectedRow inSection:0]; 

    [m_oTableView selectRowAtIndexPath:oIndexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle]; 
    [m_oTableView setNeedsDisplay]; 
} 

答えて

2

は、私はあなたがその行を選択し、したがって、指定されたインデックスのパスが存在しない可能性がありますテーブルを伝える前に、これが完了していない気がする

[m_oTableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

を取り除きます。

単に[m_oTableView reloadData]でそのコールを交換し、それが

+0

を動作するかどうかを確認し、[m_oTableView performSelectorOnMainThread:@selector(reloadData)withObject:nilにするwaitUntilDone:YES];トリックをしました。ありがとう〜 – futureelite7

関連する問題