0

各セルにボタンが含まれるテーブル ビューがあります。didSelectRowAtIndexPath デリゲートは使用しませんが、ボタン アクションにはカスタム メソッドを使用します。各セル内のボタンをクリックすると、そのセルが強調表示されるか、色が変わり、他のセルのボタンがクリックされたときに通常の状態(色)に戻ります(このセルが強調表示されます)。私のボタンアクションメソッドは次のとおりです:

- (void)SelectButtonTapped:(UIButton *)button
{


    self.tabBarController.tabBar.userInteractionEnabled = YES;

    AppDelegate *proDel = [[UIApplication sharedApplication]delegate];

    UITableViewCell *cell = (UITableViewCell *)button.superview.superview;

    //MyCustomCell *cell = (MyCustomCell *)button.superview.superview;

     NSIndexPath *indexPath = [homeTable indexPathForCell:cell];


     //cell.backgroundColor = [UIColor lightGrayColor];


    //[homeTable setNeedsDisplayInRect:[homeTable rectForRowAtIndexPath:indexPath]];


    DetailViewController *objDetail=[[DetailViewController alloc] init];

    Home *tempSearchObj=(Home *)[profileArray objectAtIndex:indexPath.row];
    objDetail.firstName=tempSearchObj.userName;


    objDetail.userImageUrl=tempSearchObj.imageUrl;

    objDetail.passedProfileID = tempSearchObj.profileID;

    plsSelectLabel.text = [NSString stringWithFormat:@"%@",objDetail.firstName];

    proDel.globalName = plsSelectLabel.text;

    proDel.globalProfileId = objDetail.passedProfileID;


}

しかし、これはうまくいかないようです。どんな助けでも大歓迎です!!

4

3 に答える 3

1

cellForRowAtIndexPath のセル選択スタイルを次のように設定します。

if (cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
    }

と :

yourButton.tag = indexPath.row;

メソッドに次の行を追加して、セルを強調表示します。

UIButton *clickButton = (UIButton *)sender;

int addButtonIndex = clickButton.tag;

NSIndexPath *indexPathHighlight = [NSIndexPath indexPathForRow:addButtonIndex inSection:0];

UITableViewCell *newCell = [yourTable cellForRowAtIndexPath:indexPathHighlight];

[newCell setSelected:YES animated:YES];

前のセルを選択解除:

NSIndexPath *previousIndexPathHighlighted = [NSIndexPath indexPathForRow:previousTag inSection:0];

UITableViewCell *previousCell = [yourTable cellForRowAtIndexPath:previousIndexPathHighlighted];

[previousCell setSelected:NO animated:YES];

previousTag = clickButton.tag;
于 2012-12-06T11:45:22.777 に答える
0

私はそれを行うための最良の方法は、

NSInteger selectedCellIndex;

cellForRowAtIndex メソッドでボタンのタグを設定します

button.tag = indexPath.row

ボタンをクリックしてテーブルをリロードするときに selectedCellIndex を設定します。

selectedCellIndex = button.tag;
[self.tableView reloadData];

次に、cellForRowAtIndex メソッドで、インデックスが selectedCellIndex と同じかどうかを確認し、セルに別の色を追加します。

if( indexPath.row == selectedCellIndex ){
    //set different colors
}

if( cell == nil ) チェックの外でこれを行うことを忘れないでください。そうしないと機能しません。

于 2012-12-06T16:33:56.573 に答える
0

The proper way to go about this is that on your cellForRowAtIndex: method you have a way of knowing if your cell needs to look highlighted or not. Then, after clicking on a button and configuring whatever you need to do, you should simply do

NSArray *indexes = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:1]];
[self.tableView reloadRowsAtIndexPaths:indexes withRowAnimation:UITableViewRowAnimationNone];

The other way to go about this, is to access the cell and change it directly. But not with button.superview.superview, but rather

UITableViewCell *cell = [self.tableView cellForRowAtIndex:[NSIndexPath indexPathForRow:0 inSection:1]];
于 2012-12-06T11:45:49.633 に答える