2013-05-05 12 views
24

私はgrouptableviewにカスタムtableviewセルを持っています。そして私には隠されたものがある。私はそれを見えるようにしなければなりません。UITableViewはテーブルビューの行を非表示にします

if (self.tableView.tag == 3) { 
       self.tableView.hidden = NO; //Not working. 
      } 

はちょうど私が1行が表示されて作る必要があります。これは私のコードは動作しない3.

セルタグがあります。ご理解頂けるとありがたいです。

+0

あなたが行、そこにあなたの全体のtableViewのない隠れている http://stackoverflow.com/questions/2670635/hiding-uitableviewcell – icodebuster

+1

この記事を参照してください。 – memmons

答えて

39

heightForRowAtIndexPath:でその特定のセルのセルの高さzeroを渡し、それが自動的に隠された取得します: -

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     float heightForRow = 40; 

     YourCustomCell *cell =(YourCustomCell *)[tableView cellForRowAtIndexPath:indexPath]; 

     if(cell.tag==3) 
      return 0; 
     else 
      return heightForRow; 
} 

があなたのコードに次のメソッドを追加し、それはトリックを行います。 それがあなたを助けてくれることを願っています。

+1

これは私のために働いた。私は自分のコードを 'float heightForRow = tableView.rowHeight;に変更しました。このプロパティは、設定されていなければデフォルトの高さを返します。 –

+5

cellForRowAtIndexPath:セルがまだ存在しないため、クラッシュするため、これは機能しません。高さは、セルが作成される前に設定されます。 – Joey

+0

私によれば、これは良い解決策ではありません。なぜなら、セルを再利用すると競合が発生する可能性があるからです。 –

1

このコードを参照してください。 -

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section 
{ 
    if(section == theSectionWithoutARow) 
{ 
    if(shouldRemoveTheRow) 
     return [theArrayWithTheSectionContents count] - 1; 
    else 
     return [theArrayWithTheSectionContents count]; 
    } 
    // other sections, whatever 
    } 

    - (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:   (NSIndexPath *)indexPath 
    { 
     // blah blah standard table cell creation 

    id theCellObject; 

    if(indexPath.section == theSectionWithoutARow) 
    { 
    NSInteger theActualRowToDisplay = indexPath.row; 
    if(shouldRemoveTheRow && indexPath.row >= theRowIndexToRemove) 

    { 
     theActualRowToDisplay = indexPath.row + 1; 
    } 
    theCellObject = [theArrayWithTheSectionContents objectAtIndex:theActualRowToDisplay]; 
} 

// now set up the cell with theCellObject 

return cell; 
    } 

・ホープ、このヘルプあなた

+13

おそらく、私が読んだことがある最も恐ろしいコード – Osa

41

SWIFTでは次の2つのことを行う必要があり

  1. HIDEあなたのセルを。 (再利用可能なセルが競合する可能性があるため)

  2. セルの高さをに設定すると、ゼロになります。ここで

見て、

  1. HIDEますセル。 ZEROにセルの高さを設定

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
        let myCell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cellID",for: indexPath) as! UITableViewCell 
    
        if(indexPath.row < 2){ 
         myCell.isHidden = true 
        }else{ 
         myCell.isHidden = false 
        } 
    
        return myCell 
    } 
    
  2. 。あなたは、再利用可能なセルの競合の問題を削除することができ、これを使用して

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
        var rowHeight:CGFloat = 0.0 
    
        if(indexPath.row < 2){ 
         rowHeight = 0.0 
        }else{ 
         rowHeight = 55.0 //or whatever you like 
        } 
    
        return rowHeight 
    } 
    

セルでも同じことができますか?.tagタグで特定のセルを非表示にすることもできます。

+0

より良い答えを –

+0

私はこれを使用すると警告が表示されます: "おそらく少なくとも以下のような制約が1つありますリストはあなたが望まないものです。これを試してみましょう:(1)各制約を見て、あなたが期待していないものを見つけよう。 (2)不要な制約や制約を加えたコードを見つけて修正する " – DrPatience

+2

なぜセルを隠す必要があるのか​​分かりませんが、高さをゼロに設定すると再利用可能なセルが競合してしまうのですか? –

関連する問題