我在didSelectRowAtIndexPath:
viewDidAppear
-(void)viewDidAppear:(BOOL)animated {
[self tableView:self.tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
}
这是didSelectRow
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = (UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
[UIView animateWithDuration:0.4 animations:^{
cell.contentView.backgroundColor = [UIColor blackColor];
cell.textLabel.textColor = [UIColor whiteColor];
}];
[UIView animateWithDuration:0.4 animations:^{
UITableViewCell *cell = (UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor blackColor];
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.transform = CGAffineTransformMakeScale(1.1f, 1.1f);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.4 animations:^{
cell.textLabel.transform = CGAffineTransformIdentity;
}];
}];
}
它运行正常,但是当我选择一个新单元格时,viewDidAppear
didSelectRow
调用中选择的第一个单元格不会调用didDeselectRowAtIndexPath:
它会保持黑色并且下面的动画不会选择新单元格时运行。问题是在viewDidAppear
中的呼叫中选择的第一个单元格保持选中状态,直到再次被选中。似乎是没有触摸传递indexPath的问题。
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = (UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
[UIView animateWithDuration:0.4 animations:^{
cell.contentView.backgroundColor = [UIColor whiteColor];
cell.textLabel.textColor = [UIColor blackColor];
}];
}
答案 0 :(得分:0)
方法didSelectRowAtIndexPath
是UITableViewDelegate
方法。您不应该调用它,系统会根据用户操作调用它。
如果要选择表格视图行,则应调用表格视图的selectRowAtIndexPath
方法:
[self.tableView selectRowAtIndexPath: [NSIndexPath indexPathForRow:0 inSection:0]];
如果您这样做,表格视图将正确选择行。
答案 1 :(得分:0)
您是否在UITableView的“属性”检查器中选中了“选择”选项? 是单选还是多选?
问题是由于多重选择 问题是由于多重选择
或者您可以在ViewWillApear中使用而不是didSelectRow,因为它不是在UITableView中选择行的正确方法
[tableView selectRowAtIndexPath:indexPath
animated:NO
scrollPosition:UITableViewScrollPositionMiddle];
答案 2 :(得分:0)
我想你需要告诉tableview你被选中了这个单元格,之后第一次知道有一个单元被选中,为此你需要做类似下面的事情,
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
UITableViewCell *cell = [self.myTableView cellForRowAtIndexPath:indexPath];
if(cell)
{
//tell the tableview that first cell is selected so that deselct method is called after selecting the otehr cell
[self.myTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[self performSelectionAnimationFor:cell]; //perfor your selection animation
}
}
在上面我们只是选择单元格,然后我们执行代码的动画部分(参见注释)。
为简单起见,我将动画代码分开,如下所示,
- (void)performSelectionAnimationFor:(UITableViewCell *)cell
{
[UIView animateWithDuration:0.4 animations:^{
cell.contentView.backgroundColor = [UIColor blackColor];
cell.textLabel.textColor = [UIColor whiteColor];
}];
[UIView animateWithDuration:0.4 animations:^{
//UITableViewCell *cell = (UITableViewCell*)[self.myTableView cellForRowAtIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor blackColor];
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.transform = CGAffineTransformMakeScale(1.1f, 1.1f);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.4 animations:^{
cell.textLabel.transform = CGAffineTransformIdentity;
}];
}];
}
并取消选择动画如下,
- (void)performDeselectionAnimationFor:(UITableViewCell *)cell
{
[UIView animateWithDuration:0.4 animations:^{
cell.contentView.backgroundColor = [UIColor whiteColor];
cell.textLabel.textColor = [UIColor blackColor];
}];
}
你可以从tableview委托方法单元格这些方法,如下所示,
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = (UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
[self performSelectionAnimationFor:cell];
}
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = (UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
[self performDeselectionAnimationFor:cell];
}
并且您已经将单元格选择样式配置为UITableViewCellSelectionStyleNone
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//...cell creation
//set this if u are not
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}