0

IOS アプリで tableView をカスタマイズしようとしています。私のtableView(または配列)が空の場合、tableViewのアイテムの代わりにカスタマイズされたラベルを表示したいと思います。私が参照しているラベルは「label0」です。しかし、私の [label0 setHidden:YES]; 何かがひどく間違っています。または [label0 setHidden:NO]; if「メソッド」の最初のブロックでのみ機能しますか? 2番目のブロック(そうでない場合)では、ラベルを(非表示または表示)に設定しようとしても何も起こりません。

私は何を逃したのですか?自分の非が見えない?

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0,     tableView.bounds.size.width, 30)] autorelease];
UILabel *label0 = [[[UILabel alloc] initWithFrame:CGRectMake(0, 25,  tableView.bounds.size.width - 0, 100)] autorelease];

if ([self.searchResults count] == 0){

headerView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"lista2.png"]];

UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(5, 3, tableView.bounds.size.width - 5, 18)] autorelease];
label.text = @"Information";
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor clearColor];
[headerView addSubview:label];

 label0.text = @"Test test test";
  label0.textColor = [UIColor blackColor];
 label0.backgroundColor = [UIColor whiteColor];
 [tableView addSubview:label0];
  [label0 setHidden:NO];

 }

 else {

headerView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"lista2.png"]];

UILabel *label2 = [[[UILabel alloc] initWithFrame:CGRectMake(5, 3, tableView.bounds.size.width - 5, 18)] autorelease];
label2.text = @"Search results";
label2.textColor = [UIColor whiteColor];
label2.backgroundColor = [UIColor clearColor];
[headerView addSubview:label2];
[label0 setHidden:YES];       

}

 return headerView;
}

編集

コードを viewDidLoad に移動し、UILabel のプロパティを設定しました。残念ながら、これは私の問題を解決していません....

UILabel *label0 = [[[UILabel alloc] initWithFrame:CGRectMake(0, 25,    tableView.bounds.size.width - 0, 100)] autorelease];
[tableView addSubview:label0];

   if ([self.searchResults count] == 0){

       label0.text = @"Test test test";
       label0.textColor = [UIColor blackColor];
       label0.backgroundColor = [UIColor whiteColor];
       [label0 setHidden:NO];
   }
   else {
      [label0 setHidden:YES];
   }
4

3 に答える 3

0

編集で、UILabelのプロパティを設定すると言います(label0というプロパティがあると思いますか?)。その場合、ラベルを初期化するときは、UILabel * label0=....ではなくself.label0=.....である必要があります。

于 2012-10-21T23:56:07.283 に答える
0

label0サブビューとして追加するのを忘れました。この行をelseステートメントに追加してください

 [tableView addSubview:label0];

また、そうすることによるメリットも見当たりません。テーブルビューを非表示にして、ラベルを持つ別のビューを表示できると思います。しかし、ビューをそのように入れ子にするのは良くありません。1 か月後にこのコードをデバッグするために戻ってくると、理解するのに苦労することになります。

于 2012-10-21T21:44:43.697 に答える
0

これは、このメソッドが呼び出されるたびに label0 が作成されるため、「else」ではまったく異なるオブジェクトを参照しているためです (配列が空のときに tableView に追加したオブジェクトではありません)。

このメソッドから tableView にサブビューを追加しないでください。viewDidLoad の使用を検討してください。そうすれば、label0 を 1 回だけ追加できます。これを実現するには、viewController のプロパティとして label0 を追加します。

于 2012-10-21T21:37:56.043 に答える