简体   繁体   中英

Changing custom tableview cell button background image using NSNotification from non-tableview host class

1) I have a simple table view hosted by view controller and cell hosted by custom UITableViewCell class. A button on my cell drops down a menu (a simple table view controller loading from the non-host 'out of the picture' class using FPPopoverMenu ).

2) The problem is I want to update my button background image on dropdown menu row selection which involves my 'out of the picture dropdown menu tableview class' and my 'custom table view cell class' totally deserting the host of my custom UITableViewCell .

3) I tried using NSNotification like, I successfully did for a simple scenario involving only host-class and dropdown menu class but now its the custom tableview cell (which is a repeating entity) and dropdown class I want to communicate.. Please help. I set up NSNotification but background image stays the same, means notification doesn't reach/doesn't reach in time.

4) Apparently I need 10 reputation to post image (:-[) so here's the link:

在此处输入图片说明

As shown by the image, I have fired notification on dropdown's didSelectRow, when Hide is pressed, background should change otherwise, if show is pressed it should be green as shown..as i did before but this doesn't do anything for me. Any help will be greatly appreciated. thank you in advance!

To achieve this you can use blocks.

You need to add

@property (nonatomic, copy) void (^didSelectAction)(NSIndexPath *indexPath);

to view controller which is shown in popover.

than in tableView: didSelectRowAtIndexPath: call this block

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.didSelectAction)
        self.didSelectAction(indexPath);
}

So when you create a popover you should provide additional handler. Something like this

Add new action to your button

- (UITableViewCell *) tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
    [[cell button] addTarget:self action:@selector(showPopoverFromButton:) forControlEvents:UIControlEventTouchUpInside];
}

- (void) showPopoverFromButton:(UIButton *)sender {
    //Your table view which is shown in popover
    UITableViewController *controller = [[UITableViewController alloc] init];
    [controller setDidSelectAction:^{
         [sender setBackgroundColor:[UIColor redColor]];
    }];
    FPPopoverMenu *popover = [[FPPopoverController alloc] initWithViewController:controller];        
    [popover show];
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM