簡體   English   中英

在DetailViewController中點擊按鈕時,在單個UITableViewCell內部更改圖像

[英]Change image inside of a single UITableViewCell when button tapped in DetailViewController

在我的詳細視圖控制器(DetailViewController.m)中,將觸發更改UITableViewCell類型中的圖像的通知。 我有兩種類型的UITableViewCells。 也就是說,當tapButton或declineButton被點擊時,我只想讓圖像在1個特定單元格中更改(具體地說,是在打開細節視圖的抽頭單元格中的圖像 - 而不是在該類型的所有單元格中)。 我該怎么做呢? 到目前為止,這是我的代碼:

DetailViewController.m

  - (IBAction)acceptButton:(id)sender {

        if (!checked1) {

            [self.acceptCheck setImage:[UIImage imageNamed:@"checkedgreen.png"] forState:UIControlStateNormal];

            checked1 = YES;

             [[NSNotificationCenter defaultCenter] postNotificationName:@"ImageChangeNotification" object:nil];

            AcceptedViewController *detailViewController = [[AcceptedViewController alloc]
                                                               initWithNibName:@"AcceptedViewController" bundle:nil];


            [self presentViewController:detailViewController animated:YES completion:nil];

        }

        else if (checked1) {

            [self.acceptCheck setImage:[UIImage imageNamed:@"uncheckedgray.png"] forState:UIControlStateNormal];
            checked1 = NO;

        }

    }

- (IBAction)declineButton:(id)sender {

    if (!checked2) {

        [self.declineCheck setImage:[UIImage imageNamed:@"declinered.png"] forState:UIControlStateNormal];
        checked2 = YES;

        [[NSNotificationCenter defaultCenter] postNotificationName:@"Declined" object:nil];

        DeniedViewController *detailViewController = [[DeniedViewController alloc]
                                                            initWithNibName:@"DeniedViewController" bundle:nil];


        [self presentViewController:detailViewController animated:YES completion:nil];

    }

    else if (checked2) {

        [self.declineCheck setImage:[UIImage imageNamed:@"declinegray.png"] forState:UIControlStateNormal];
        checked2 = NO;

    }
}

TableViewCellB.m

- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(changeImage)
                                                 name:@"ImageChangeNotification"
                                               object:nil];


    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(declineImage)
                                                 name:@"Declined"
                                               object:nil];   
}

-(void)changeImage
{
    [self.displayedBar setImage:[UIImage imageNamed:@"greenbar.png"]];
    self.Title.text = @"Accepted!";

}


-(void)declineImage
{
    [self.displayedBar setImage:[UIImage imageNamed:@"redbar.png"]];
    self.Title.text = @"Declined!";

}

TableViewController.m (需要它)

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


        NSDictionary *data = self.messages[indexPath.row];

        id swaptime = data[@"swaptime"];
        if ([swaptime isKindOfClass:[NSString class]]) {

            static NSString *ChatTableIdentifier2 = @"SwapDetailTableViewCell";

            SwapDetailTableViewCell *cell = (SwapDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier2 forIndexPath:indexPath];

            NSString *time = data[@"swaptime"];
            cell.startTime.text = time;

            NSString *timeEnd = data[@"endswaptime"];
            cell.endTime.text = timeEnd;

            NSString *costofSwap = data[@"swapvalue"];
            cell.swapValue.text = costofSwap;
      return cell;

        } else {
            static NSString *ChatTableIdentifier = @"ChatTableViewCell";

            ChatTableViewCell *cell = (ChatTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier forIndexPath:indexPath];

            NSString *userName = data[@"name"];
            cell.sendingUser.text = userName;

            NSString *messageBody = data[@"body"];
            cell.messageDisplayed.text = messageBody;

            NSString *timeReceived = data[@"published at"];
            cell.timeStamp.text = timeReceived;


            NSString *userInfo = [self.userid objectForKey:@"name"];


            if ([cell.sendingUser.text isEqual: userInfo]) {

                cell.messageDisplayed.textAlignment = NSTextAlignmentLeft;
                cell.sendingUser.textAlignment = NSTextAlignmentLeft;


                [cell.chatBubble setImage:[UIImage imageNamed:@"bubblegrey2.png"]];


            } else {

             cell.messageDisplayed.textAlignment = NSTextAlignmentRight;
             cell.sendingUser.textAlignment = NSTextAlignmentRight;


                [cell.chatBubble setImage:[UIImage imageNamed:@"bubbleorange2.png"]];

            }


            return cell;
        }
    }

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


    NSDictionary *data = self.messages[indexPath.row];

    id swaptime = data[@"swaptime"];

    if ([swaptime isKindOfClass:[NSString class]]) {

    SwapDetailsViewController *detailViewController = [[SwapDetailsViewController alloc]
                                                        initWithNibName:@"SwapDetailsViewController" bundle:nil];

        detailViewController.indexPath = [self.tableView indexPathForSelectedRow];
        detailViewController.delegate = self;


    detailViewController.swapDetails = [self.messages objectAtIndex:indexPath.row];

  [self presentViewController:detailViewController animated:YES completion:nil];

    } else {


    }

}
@interface DetailViewController ()
{
    UIImage *_yourImage;
}

然后在declineButtonacceptButton更改它你需要它並執行[tableView reloadData]

在DetailViewController.h中創建協議並創建它的屬性,如下所示。

@protocol DetailViewControllerDelegate <NSObject>

- (void)acceptButton:(BOOL)accepted withIndexPath:(NSIndexPath*)indexPath;

@end

@interface DetailViewController : UIViewController

@property (strong, nonatomic) NSIndexPath *indexPath;
@property (weak, nonatomic) id<DetailViewControllerDelegate> delegate;
// other properites and methods ....

@end

在MasterViewController中

在推送detailViewController時,通過indexpath並將delegete設置為self並確認,實現委托方法,如下所示

@interface MasterViewController () <DetailViewControllerDelegate>
// other properties....
@end

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {

        DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];
        controller.indexPath = [self.tableView indexPathForSelectedRow];
        controller.delegate = self;
        // Other code...
    }
}

- (void)acceptButton:(BOOL)accepted withIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    if (accepted) {
        // do accepted stuff
    } else {
        // do decline stuff
    }
}

在DetailViewController.m中

實現接受和拒絕按鈕操作

 - (IBAction)acceptButton:(id)sender {

    if (!checked1) {
        [self.acceptCheck setImage:[UIImage imageNamed:@"checkedgreen.png"] forState:UIControlStateNormal];
        checked1 = YES;
        /// calling delegate method
        [self.delegate acceptButton:YES withIndexPath:self.indexPath];
        AcceptedViewController *detailViewController = [[AcceptedViewController alloc]
                                                        initWithNibName:@"AcceptedViewController" bundle:nil];
        [self presentViewController:detailViewController animated:YES completion:nil];

    } else if (checked1) {
        [self.acceptCheck setImage:[UIImage imageNamed:@"uncheckedgray.png"] forState:UIControlStateNormal];
        checked1 = NO;
    }
}

- (IBAction)declineButton:(id)sender {

    if (!checked2) {
        [self.declineCheck setImage:[UIImage imageNamed:@"declinered.png"] forState:UIControlStateNormal];
        checked2 = YES;
        /// calling delegate method
        [self.delegate acceptButton:NO withIndexPath:self.indexPath];
        DeniedViewController *detailViewController = [[DeniedViewController alloc]
                                                      initWithNibName:@"DeniedViewController" bundle:nil];
        [self presentViewController:detailViewController animated:YES completion:nil];
    } else if (checked2) {
        [self.declineCheck setImage:[UIImage imageNamed:@"declinegray.png"] forState:UIControlStateNormal];
        checked2 = NO;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM