0

プロトタイプ セルでは IBOutlet を指定できないため、タグを使用して UIbutton のハンドルを取得しました。ただし、メソッドでボタンの画像を設定cellForRowAtIndexPathすると、有効および無効状態の正しい画像が表示されません。

cellForRowIndexPath:

if([cellIdentifier isEqualToString:CELL_ID_COMPLIANCE])
    _infoButton = (UIButton *)[cell viewWithTag:800];
else
    _infoButton = (UIButton *)[cell viewWithTag:900];

if([[comments objectAtIndex:kEntitlementComment] length] > 0){
    _infoButton.enabled= YES;
    [_infoButton setImage:[UIImage imageNamed:@"icon_info.png"] forState:UIControlStateNormal];
    TRACELOG(@"the coments :%@", [comments objectAtIndex:kEntitlementComment]);
    }
else{
    _infoButton.enabled= NO;
    [_infoButton setImage:[UIImage imageNamed:@"info_icon_disabled.png"] forState:UIControlStateDisabled];
    }

テーブルには 2 種類のプロトタイプ セルがありますが、ボタン イメージは 2 種類しかありません。私も試しました

[self performSelectorOnMainThread:@selector(doButtonSettings:) 

Object:textArray waitUntilDone:YES]; 

セレクターでボタンの画像を設定しています。ご存知のように、buttonType はプライベート セッターであるため、動的に変更することはできません。ボタン画像を条件に一致させるにはどうすればよいですか?

4

3 に答える 3

1

setImage の呼び出しを、セルが作成される場所に移動します。すべてのボタンの通常状態と無効状態の両方の画像を設定します。

ifステートメントでは、ボタンの状態を切り替えるだけで済みます

if([[comments objectAtIndex:kEntitlementComment] length] > 0){
  _infoButton.enabled= YES;
}
else{
  _infoButton.enabled= NO;
}

ただし、この変更だけでは問題は解決しません。すべてのコードを cellForRowIndexPath 内に投稿していただけると助かります。問題は、dequeueReusableCellWithIdentifier を呼び出し、nil の場合はセルを作成する場所にあると思われます。

于 2013-07-10T21:22:56.977 に答える
0

私はsolnを手に入れました:実際にはIBActionメソッドで、ポップオーバーがinfoButtonに関連付けられていました。- (IBAction)infoButtonAction:(id)送信者イベント:(id)イベント{

NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:_summaryTableView];
NSIndexPath *indexPath = [_summaryTableView indexPathForRowAtPoint:touchPoint];
UITableViewCell *cell  = [_summaryTableView cellForRowAtIndexPath:indexPath];

_infoButton.tag=indexPath.row;

if ( [self.myPopoverController isPopoverVisible] )
{
    // Close the popover view if toolbar button was touched again and popover is already visible
    [self.myPopoverController dismissPopoverAnimated: YES];
    return;
}

UIStoryboard                     *storyboard     = [UIStoryboard storyboardWithName: @"iPad" bundle: nil];
NSITSLMEntitlementSummCommentsViewController    *popoverContent = [storyboard instantiateViewControllerWithIdentifier: @"slm_ES_Comments"];

self.myPopoverController =   [[UIPopoverController alloc] initWithContentViewController: popoverContent];
popoverContent.comments.text  = [[self.dataController getSummaryRecordAtIndex:indexPath.row] objectAtIndex:kEntitlementComment];

 // Present the popover view non-modally with a refrence to the toolbar button which was pressed
if([popoverContent.comments.text length] > 0)
    [self.myPopoverController presentPopoverFromRect:[sender frame] inView:cell permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
_infoButton.tag= 800;

}

テーブル内のいずれかのボタンを押すたびに、情報ボタン タグが変化していました。だから私は最後の行を追加しましたが、今は問題ありません。とにかくサンクス..

于 2013-07-10T21:52:27.380 に答える