2011-01-18 12 views
0

私のiPhoneアプリケーションでは、クリックしたボタンに基づいて異なるテーブルセットを表示するために単一のテーブルビューを使用しています。iPhone SDKのボタンクリックでtableview全体を空にする方法は?

同じテーブルビューを使用しているので、新しいボタンが選択されるたびにtableViewの内容を空白にする必要があります。

これはまったく通常の要件ですか?したがって、7つの異なるデータセットを表示するには7つのテーブルを取ることは非効率的です。

問題:

私は、そのテーブルが消去されますが、我々は、テーブル内の他のデータを表示する際、以前のデータはAFTERスクリーンショットのように、バックグラウンドで表示されます見てきました。 配列をnilに設定してtableViewを再ロードしようとしましたが、うまくいかないようです。

この問題の修正方法は何ですか?

私はコードをチェックしており、それは私にとっては正しいようです。

スクリーンショットを参照すると、実際に何が起こっているかを知ることができます。

あなたは明確にすることができます(イベントカテゴリボタンがいくつかの他のカテゴリボタンの後にクリックされた後、すなわち)AFTER

alt text

(つまり、イベントがクリックされた最初の時間)の前に

同じスクリーンショットの画像と同じでなければならないバックグラウンドの別の画像を参照してください。これはボタンではなく、私はUIImageViewをtableViewCellに追加しています。

alt text

答えて

2

NSArrayのはつまり、あなたがそれを変更することはできません、変更できません。代わりにNSArrayはNSMutableArrayのを使用して、使用する使用の

[mutArr removeAllObjects]。

その後、tableViewをリロードします。それは私のために働いた。ボタンのアクションメソッドで

+0

明確ではありません。私たちがreloadDataを呼び出すと、[mutArr count]が0であるため、tableViewをnumberOfRowsinSectionメソッドで0を返すので、テーブルを空にすることはできません。その結果、cellForRowAtIndexPathメソッドには入りません。その場合何をすべきか? –

+0

tableViewを正しく合成したかどうかをチェックしてください。私はまた、この問題に直面している、私は2つのdiffインスタンスが同じtableViewのために作成されていることを発見したデバッグで。それを確認してください – KingofBliss

+0

私が直面している問題についてのスクリーンショットを追加しました。それを確認してください。その場合、何ができるでしょうか?また、私は自分のテーブルビューを合成しているので、何の問題もないはずです。 –

0

、以前のセルを初期化されてからリロードし、目的にnullを割り当てるのtableViewを呼び出し、

[tableView reloadData]; 
+0

上記の質問をお読みください。私はすでに配列のnullを言及していると、テーブルビューを再読み込みは動作していないようです。とにかく入力のおかげで。 –

+0

私が理解しているのは、あなたがtableviewの空のセルを見たいと思っていることです。 –

+0

いいえ既存のデータを消去して、ボタンクリックでtableViewに新しいデータを入力したいとします。私が直面している問題についてのスクリーンショットを追加しました。それを確認してください。その場合、何ができるでしょうか? –

0

私はあなたの配列がnilであれば、それが動作するとは思いません。

myArr = [NSArray array]; 

次に、tableViewデータをリロードして空の配列として初期化してみてください。そうでなければ、私たちはあなたのコード

EDITを参照する必要があると思うそれはまだ少し不明である

(まだあなたの質問ではありませんコード)が、私はあなたの問題は本当にあなたのセル構造に関連していると思います。すべてのcellForRowAtIndexPathメッセージにUIImageViewを追加していますか?あなたがnumberOfRowsInSectionゼロを返す、とのisEmptyためBOOL変数を追加することができます

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

     static NSString *CellIdentifier = @"cellName"; 

     myCell *cell = (myCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 
      //CONSTRUCT CELL. 
      //THIS IS THE ONLY PLACE WHERE YOU SHOULD ADD SUBVIEWS TO YOUR CELL 
     } 

    //Are you adding subviews here? -you shouldn't 
    //configure data in cell 
    return cell; 
+0

私が直面している問題のスクリーンショットを追加しました。それを確認してください。その場合、何ができるでしょうか? –

+0

コードを見ずに推測することができますが、セル内の既存のuiimageviewの上に新しいuiimageviewを追加するのと非常によく似ています。 – EsbenB

+0

入力いただきありがとうございます。 tableViewCellのContentViewで、私はサブビューとしてimageViewを追加しています。また、あなたが言ったように、私はImageViewを既存のImageViewに追加しているかもしれません。では、以前のImageViewを削除するにはどうしたらいいですか? –

0

は、私はあなたがに似た何かを持っていると思います。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
if(isEmpty){ 
     return 0; 
    }else{ 
     // your current logic 
    } 
} 

//action when button clicked 
-(IBAction)myAction{ 
    isEmpty = TRUE; 
    [self reloadData]; 
} 
+0

私が直面している問題に関するスクリーンショットを追加しました。それを確認してください。その場合、何ができるでしょうか? –

2
- (IBAction)yourAction { 
tableView.delegate = nil; 
tableView.dataSource = nil; 
[tableView reloadData]; 

}

それはあなたのテーブルビューを空にします...ウルの必要性は、私は私のために同じですが、doesntの仕事をしようとした

+0

私が直面している問題のスクリーンショットを追加しました。それを確認してください。その場合、何ができるでしょうか? –

+0

かなり簡単です - ありがとう! – mpemburn

関連する問題