[英]update UITableViewCell appearance when button inside cell is tapped
[英]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;
}
然后在declineButton
或acceptButton
更改它你需要它並執行[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.