-1

こんにちは、UITableViewがあり、画像を含むカスタム セルを使用しています。UITableViewをリロードすると、問題なくリロードされますが、画像は削除されません。これを画像に nil に設定し、removeFromSuperView も試してみましたが、うまくいきませんでした。

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:identity];
if (cell == nil) {
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identity DefaultsArray:defaultColAndSpacesDict];

    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }

    cell.selectionStyle=UITableViewCellSelectionStyleNone;
}

if([[dtaDictionary allKeys] count]!=0)
{
    [cell.contentView clearsContextBeforeDrawing];

    if([defaultsArray containsObject:@"Note"])
    {

        NSString *patNotes=[[currRow objectForKey:@"pat_notes"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        NSString *appNotes=[[currRow objectForKey:@"Notes"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

        if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
        {
            [cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateNormal];
            [cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateHighlighted];
            [cell.Note addTarget:self action:@selector(showNote:) forControlEvents:UIControlEventTouchUpInside];
        }
        else
        {
                cell.Note.imageView.image=nil;
        }
    }

プログラムをデバッグしましたが、nil が割り当てられています。私もImageViewのremoveFromSuperViewを試しました。何が問題なのですか?

注: Cell.Note は UIButton です

4

3 に答える 3

1

if条件内で最初にimageViewに画像を割り当てていません。

例えば ​​:

   if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
    {

       cell.Note.imageView.image=[UIImage imageNamed:@"notes-green.png"];
         //Rest of Code

    }

   else
    {
          cell.Note.ImageView.image=nil ;
    }

imageView に画像を割り当てているので、上記のケースは完全に機能します。

しかし、あなたのケースでは、カスタムメソッド setBackgroundImage: を呼び出して画像を割り当てています。この場合、 setBackgroundImage: method 内で使用されている他のビューに割り当てられます。

そのため、以下のコードを検討してください。

   if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
    {
        [cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateNormal];
       //Rest of Code
    }

     else
    {
        [cell.Note setBackgroundImage:nil forState:UIControlStateNormal];

    }

そのクリアを願って!!!

于 2013-10-22T07:25:46.253 に答える
1

コードによると、コントロール状態のボタンに背景画像を設定しました。背景画像やクリア画像を変更したい場合は、ボタンの背景画像を再設定する必要があります。

[cell.Note setBackgroundImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateNormal];

[cell.Note setBackgroundImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateHighlighted];

それ以外の場合は、背景画像に nil を設定するか、必要に応じて非表示にします。

于 2013-10-22T06:42:39.363 に答える
-1

追加してみる[cell.Note setNeedsDisplay]

于 2013-10-22T06:26:35.063 に答える