在做一个多选功能
开始我设置某个cell的状态为:
cell.selected = yes;
然后表格显示后 这个cell左边就会有个小勾 但是我点击这个cell的时候它执行的代理的
tableView:didSelectRowAtIndexPath 这个方法 而不是
tableView:didDeselectRowAtIndexPath 这个方法
怎么设置才可以让你第一次点击cell的时候就去调用tableView:didDeselectRowAtIndexPath这个方法?
|
|
uitableview本身就提供多选功能,选中的状态的管理不需要自己再维护。允许uitableivew多选设置一个属性就可以了,这时
self.tableView.allowsMultipleSelectionDuringEditing=YES;
[self.tableView setEditing:YES]; //////设置uitableview为编译状态
/////同时还有一个属性保存了你当前选择的indexPath集合
NSArray *indexPaths =[self.tableView indexPathsForSelectedRows];
|
|
//
我现在有个问题就是 一开始显示表格的时候就让某一个cell是选中的状态(左边有个勾) 然后我点击这个cell让他不选中
但是 每次我都要点击两次 那个cell的选中状态(就是个勾)才会消失 怎么然他一开始是选中的后点一下它就变为不选中呢?
|
|
如果找不到系统提供的方法, 可以想想自己去实现。
比如下面这个是不是你想要的效果?
如果是这样的话, 你可以在didSelectRowAtIndexPath用一个NSUserDefaults来记录你的当前选择, 然后在cellForRowAtIndexPath中显示对应的效果, 比如这样:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellTableIdentifier = @"CellTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellTableIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellTableIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone; //选中cell时无色
}
cell.textLabel.text = voiceArr[indexPath.row];
if ([[[NSUserDefaults standardUserDefaults]valueForKey:APP_CHANGEVOICE] isEqualToString:[resuleArr objectAtIndex:indexPath.row]])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[[NSUserDefaults standardUserDefaults]setValue:[resuleArr objectAtIndex:indexPath.row] forKey:APP_CHANGEVOICE];
AudioServicesPlaySystemSound([[resuleArr objectAtIndex:indexPath.row]integerValue]);
[myTableView reloadData];
}
|
|
没碰到你说的情况, 打个包我帮你看看
|
|
是否是因为你设置cell选中的方式不对。你通过cell.selected=YES;设置成选中状态,那么在点击这行时,由于不是通过代理方法didSelectRowAtIndexPath 来选中的,所以在触发这个代理方式的时候,会被再次选中,当再点击时,uitableview内部维护了一个状态,根据这个状态在点击时就会自动调用回调方法deSelectRowAtIndexPath. 这是我的理解。所以如果是我说的这样的话,那么你在设置某个cell被选中的时候就不能通过代码cell.selected=YES;来实现了,你需要,如下伪代码
-(void)viewDidAppear:(BOOL)animated {
//////之所以在viewDidAppear中来设置某个cell被初始选中,目的是要在uitableview加载出来以后再做
[super viewDidAppear:animated];
//////这里假设你初始要选中的是第一行
NSIndexPath *indexPath =[NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
}
|
|
uitableview本身就提供多选功能,选中的状态的管理不需要自己再维护。允许uitableivew多选设置一个属性就可以了,这时
self.tableView.allowsMultipleSelectionDuringEditing=YES;
[self.tableView setEditing:YES]; //////设置uitableview为编译状态
/////同时还有一个属性保存了你当前选择的indexPath集合
NSArray *indexPaths =[self.tableView indexPathsForSelectedRows];
//
我现在有个问题就是 一开始显示表格的时候就让某一个cell是选中的状态(左边有个勾) 然后我点击这个cell让他不选中
但是 每次我都要点击两次 那个cell的选中状态(就是个勾)才会消失 怎么然他一开始是选中的后点一下它就变为不选中呢?
没碰到你说的情况, 打个包我帮你看看
是发你的邮箱吗? 代码很少的
|
|
uitableview本身就提供多选功能,选中的状态的管理不需要自己再维护。允许uitableivew多选设置一个属性就可以了,这时
self.tableView.allowsMultipleSelectionDuringEditing=YES;
[self.tableView setEditing:YES]; //////设置uitableview为编译状态
/////同时还有一个属性保存了你当前选择的indexPath集合
NSArray *indexPaths =[self.tableView indexPathsForSelectedRows];
//
我现在有个问题就是 一开始显示表格的时候就让某一个cell是选中的状态(左边有个勾) 然后我点击这个cell让他不选中
但是 每次我都要点击两次 那个cell的选中状态(就是个勾)才会消失 怎么然他一开始是选中的后点一下它就变为不选中呢?
没碰到你说的情况, 打个包我帮你看看
是发你的邮箱吗? 代码很少的
我上面又回答了,你先按我说的再试试,还不行的话,你就发我邮箱吧zhanglei5415@163.com
|
|
uitableview本身就提供多选功能,选中的状态的管理不需要自己再维护。允许uitableivew多选设置一个属性就可以了,这时
self.tableView.allowsMultipleSelectionDuringEditing=YES;
[self.tableView setEditing:YES]; //////设置uitableview为编译状态
/////同时还有一个属性保存了你当前选择的indexPath集合
NSArray *indexPaths =[self.tableView indexPathsForSelectedRows];
//
我现在有个问题就是 一开始显示表格的时候就让某一个cell是选中的状态(左边有个勾) 然后我点击这个cell让他不选中
但是 每次我都要点击两次 那个cell的选中状态(就是个勾)才会消失 怎么然他一开始是选中的后点一下它就变为不选中呢?
楼主的问题我也遇到过
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (lastPath == indexPath) {
return;
}
//lastPath在cell for row中 加载时当前indexpath,本函数中indexaPath为选中的path
UITableViewCell *lastCell = [tableView cellForRowAtIndexPath:lastPath];
lastCell.accessoryType = UITableViewCellAccessoryNone;
UITableViewCell *currentCell = [tableView cellForRowAtIndexPath:indexPath];
currentCell.accessoryType = UITableViewCellAccessoryCheckmark;
lastPath = indexPath;
currentCell.selectionStyle = UITableViewCellSelectionStyleNone;//cell选中的背景风格
}
lastPath在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中 lastPath = indexPath;
|
|
uitableview本身就提供多选功能,选中的状态的管理不需要自己再维护。允许uitableivew多选设置一个属性就可以了,这时
self.tableView.allowsMultipleSelectionDuringEditing=YES;
[self.tableView setEditing:YES]; //////设置uitableview为编译状态
/////同时还有一个属性保存了你当前选择的indexPath集合
NSArray *indexPaths =[self.tableView indexPathsForSelectedRows];
//
我现在有个问题就是 一开始显示表格的时候就让某一个cell是选中的状态(左边有个勾) 然后我点击这个cell让他不选中
但是 每次我都要点击两次 那个cell的选中状态(就是个勾)才会消失 怎么然他一开始是选中的后点一下它就变为不选中呢?
没碰到你说的情况, 打个包我帮你看看
是发你的邮箱吗? 代码很少的
我上面又回答了,你先按我说的再试试,还不行的话,你就发我邮箱吧zhanglei5415@163.com
发了 我的邮箱424607870@qq.com 谢谢了
|
|
uitableview本身就提供多选功能,选中的状态的管理不需要自己再维护。允许uitableivew多选设置一个属性就可以了,这时
self.tableView.allowsMultipleSelectionDuringEditing=YES;
[self.tableView setEditing:YES]; //////设置uitableview为编译状态
/////同时还有一个属性保存了你当前选择的indexPath集合
NSArray *indexPaths =[self.tableView indexPathsForSelectedRows];
//
我现在有个问题就是 一开始显示表格的时候就让某一个cell是选中的状态(左边有个勾) 然后我点击这个cell让他不选中
但是 每次我都要点击两次 那个cell的选中状态(就是个勾)才会消失 怎么然他一开始是选中的后点一下它就变为不选中呢?
楼主的问题我也遇到过
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (lastPath == indexPath) {
return;
}
//lastPath在cell for row中 加载时当前indexpath,本函数中indexaPath为选中的path
UITableViewCell *lastCell = [tableView cellForRowAtIndexPath:lastPath];
lastCell.accessoryType = UITableViewCellAccessoryNone;
UITableViewCell *currentCell = [tableView cellForRowAtIndexPath:indexPath];
currentCell.accessoryType = UITableViewCellAccessoryCheckmark;
lastPath = indexPath;
currentCell.selectionStyle = UITableViewCellSelectionStyleNone;//cell选中的背景风格
}
lastPath在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中 lastPath = indexPath;
这个是不是单选的 选另一行的时候就让上的变为未选中. 我的问题不是这样的 我的问题是多选的
假如一开始都没有cell选中的时候 点击某个cell它就会再左边打勾 然后cell为高亮状态 然后调用tableView:didSelectRowAtIndexPath 这个方法
但是如果一开始某个cell是选中状态(创建cell的时候cell.selected = yes),我点击这个cell 情况和上面是一样的,左边的勾没有消失也是调用上面的方法,点击第二次的时候左边的勾才消失,然后调用 tableView:didDeselectRowAtIndexPath 这个方法
|
40分 |
uitableview本身就提供多选功能,选中的状态的管理不需要自己再维护。允许uitableivew多选设置一个属性就可以了,这时
self.tableView.allowsMultipleSelectionDuringEditing=YES;
[self.tableView setEditing:YES]; //////设置uitableview为编译状态
/////同时还有一个属性保存了你当前选择的indexPath集合
NSArray *indexPaths =[self.tableView indexPathsForSelectedRows];
//
我现在有个问题就是 一开始显示表格的时候就让某一个cell是选中的状态(左边有个勾) 然后我点击这个cell让他不选中
但是 每次我都要点击两次 那个cell的选中状态(就是个勾)才会消失 怎么然他一开始是选中的后点一下它就变为不选中呢?
没碰到你说的情况, 打个包我帮你看看
是发你的邮箱吗? 代码很少的
我上面又回答了,你先按我说的再试试,还不行的话,你就发我邮箱吧zhanglei5415@163.com
发了 我的邮箱424607870@qq.com 谢谢了
已回复。你去邮箱查一下吧。
|
|
uitableview本身就提供多选功能,选中的状态的管理不需要自己再维护。允许uitableivew多选设置一个属性就可以了,这时
self.tableView.allowsMultipleSelectionDuringEditing=YES;
[self.tableView setEditing:YES]; //////设置uitableview为编译状态
/////同时还有一个属性保存了你当前选择的indexPath集合
NSArray *indexPaths =[self.tableView indexPathsForSelectedRows];
//
我现在有个问题就是 一开始显示表格的时候就让某一个cell是选中的状态(左边有个勾) 然后我点击这个cell让他不选中
但是 每次我都要点击两次 那个cell的选中状态(就是个勾)才会消失 怎么然他一开始是选中的后点一下它就变为不选中呢?
没碰到你说的情况, 打个包我帮你看看
是发你的邮箱吗? 代码很少的
我上面又回答了,你先按我说的再试试,还不行的话,你就发我邮箱吧zhanglei5415@163.com
发了 我的邮箱424607870@qq.com 谢谢了
已回复。你去邮箱查一下吧。
太感谢了,解决了,接受建议,以后会多动手的
|
|
你好,我按照上面的提示自己解决这个问题,但是现在出现新的问题,cell复用的时候,崩溃在 [_tableView selectRowAtIndexPath:indexpath animated:YES scrollPosition:UITableViewScrollPositionNone];但是我的断点那里indexpath是有数据的,不知道什么原因啊,请大神指点
|
|
你好,我按照上面的提示自己解决这个问题,但是现在出现新的问题,cell复用的时候,崩溃在 [_tableView selectRowAtIndexPath:indexpath animated:YES scrollPosition:UITableViewScrollPositionNone];但是我的断点那里indexpath是有数据的,不知道什么原因啊,请大神指点
是否是执行的时机不对,uitableview还没有加载完数据。在viewDidAppear这个方法中处理。
|