#import "ViewController.h" @interface ViewController ()<UITableViewDataSource,UITableViewDelegate> { NSIndexPath * m_LastIndexPath; NSIndexPath * m_currentIndexPath; } @property (weak, nonatomic) IBOutlet UITableView *tableView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 30; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *ID = @"SINGLECELL"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (!cell) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } ((UILabel *)[cell viewWithTag:20]).text = [NSString stringWithFormat:@"第%ld行",indexPath.row+1]; UIButton *cellButton = (UIButton *)[cell viewWithTag:10]; if (m_LastIndexPath && m_currentIndexPath && m_LastIndexPath == m_currentIndexPath) { m_currentIndexPath = nil; m_LastIndexPath = nil; } [cellButton setImage:[UIImage imageNamed:@"Choice_icon2"] forState:UIControlStateNormal]; if (m_currentIndexPath && m_currentIndexPath.row == indexPath.row) { [cellButton setImage:[UIImage imageNamed:@"Choice_icon"] forState:UIControlStateNormal]; } if (m_LastIndexPath && m_LastIndexPath != m_currentIndexPath && m_LastIndexPath.row == indexPath.row ) { [cellButton setImage:[UIImage imageNamed:@"Choice_icon2"] forState:UIControlStateNormal]; } [cellButton addTarget:self action:@selector(cellButton:forEvent:) forControlEvents:UIControlEventTouchUpInside]; return cell; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIAlertController * alertController = [UIAlertController alertControllerWithTitle:nil message:[NSString stringWithFormat:@"你选中的是第%ld行",indexPath.row+1] preferredStyle:UIAlertControllerStyleAlert]; [alertController addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { NSLog(@"do anything you like"); }]]; [self presentViewController:alertController animated:YES completion:nil]; } -(void)cellButton:(UIButton *)sender forEvent:(UIEvent *)event { NSSet *touchs = [event allTouches]; UITouch *touch = [touchs anyObject]; CGPoint touchPoint = [touch locationInView:self.tableView]; m_currentIndexPath = [self.tableView indexPathForRowAtPoint:touchPoint]; if (m_LastIndexPath == m_currentIndexPath) { [_tableView reloadRowsAtIndexPaths:@[m_currentIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } else { if (m_LastIndexPath) { [_tableView reloadRowsAtIndexPaths:@[m_LastIndexPath,m_currentIndexPath] withRowAnimation:UITableViewRowAnimationLeft]; } else { [_tableView reloadRowsAtIndexPaths:@[m_currentIndexPath] withRowAnimation:UITableViewRowAnimationLeft]; } m_LastIndexPath = m_currentIndexPath; } }
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @end