Ios 使用UISearchBar时,UIButton不记得其在tableView中的状态
我在tableview中重用自定义单元格时遇到问题 正如我所说,我的tableView有一个自定义单元格,其中有一个按钮,用于向特定单元格的用户发送或取消好友请求 在这个TableView中,我还有一个UISearchBar来过滤应用程序的用户 在正常模式下重复使用单元格可以很好地工作,但是当我去过滤时,用户无法保持按钮在正常模式下的状态 例如 TableView I搜索模式: 如果用户向Richard Marx发送请求,则按钮会正确地变为橙色,即使tableview没有发生任何事情,也不会太好。。。但是,如果您使用UISearchBar,则与橙色按钮的匹配程度不超过“包含Richard Marx先生的单元格,而是与Abram Van Helsing先生的单元格,后者恰好是搜索模式下列表中的第一个单元格。” 我已经创建了一个适合用户点击的数组,但只有在不使用UISearchBar的情况下,它才似乎有效 你能帮我什么忙吗 这是用于过滤单元格中按钮状态的数组的实现Ios 使用UISearchBar时,UIButton不记得其在tableView中的状态,ios,uitableview,uibutton,parse-platform,Ios,Uitableview,Uibutton,Parse Platform,我在tableview中重用自定义单元格时遇到问题 正如我所说,我的tableView有一个自定义单元格,其中有一个按钮,用于向特定单元格的用户发送或取消好友请求 在这个TableView中,我还有一个UISearchBar来过滤应用程序的用户 在正常模式下重复使用单元格可以很好地工作,但是当我去过滤时,用户无法保持按钮在正常模式下的状态 例如 TableView I搜索模式: 如果用户向Richard Marx发送请求,则按钮会正确地变为橙色,即使tableview没有发生任何事情,也不会太好
- (void)viewDidLoad {
[super viewDidLoad];
self.buttonPressedSelectedRowArray = [[NSMutableArray alloc] init];
int i = NO;
for (i=0; i<20; i++) {
[self.buttonPressedSelectedRowArray addObject:[NSNumber numberWithInt:NO]];
}
}
UIButton *myButton = (UIButton *)[cell.myContentView viewWithTag:100];
UIImage *imageFriendAdd = [UIImage imageNamed:@"On_userAddFriend@2x"];
if (myButton == nil) {
myButton = [UIButton buttonWithType:UIButtonTypeSystem];
myButton.frame = CGRectMake(264.0, 30.0, 30.0, 30.0);
[myButton setBackgroundImage:imageFriendAdd forState:UIControlStateNormal];
myButton.tag = 100;
[myButton addTarget:self action:@selector(tapped:andEvent:) forControlEvents:UIControlEventTouchUpInside];
[cell.myContentView addSubview:myButton];
NSLog(@" BUTTON CREATED !!!");
} else {
}
if ([self.buttonPressedSelectedRowArray [indexPath.row] boolValue]) {
UIImage *imageFriendAddOn = [UIImage imageNamed:@"On_userAddFriend@2x"];
[myButton setBackgroundImage:imageFriendAddOn forState:UIControlStateNormal];
}
else {
UIImage *imageFriendAddOff = [UIImage imageNamed:@"Off_userAddFriend@2x"];
[myButton setBackgroundImage:imageFriendAddOff forState:UIControlStateNormal];
}
PFObject *object = [userArray objectAtIndex:indexPath.row];
if (!isFiltered) {
cell.user_photoProfile.image = [UIImage imageNamed:@"camera"];
cell.user_photoProfile.layer.masksToBounds = YES;
cell.user_photoProfile.layer.cornerRadius = 3.0f;
cell.user_photoProfile.contentMode = UIViewContentModeScaleAspectFill;
cell.user_photoProfile.file = [object objectForKey:NPUserKey_PHOTOPROFILE];
[cell.user_photoProfile loadInBackground];
NSString *nameText = [object objectForKey:NPUserKey_NOMECOGNOME];
cell.label_UserNomeCognome.text = nameText;
cell.itemText = nameText;
}
else {
PFObject *filteredObject = [filteredUserArray objectAtIndex:indexPath.row];
cell.user_photoProfile.file = [filteredObject objectForKey:NPUserKey_PHOTOPROFILE];
cell.user_photoProfile.image = [UIImage imageNamed:@"camera"];
[cell.user_photoProfile.layer setMasksToBounds:YES];
[cell.user_photoProfile .layer setCornerRadius:5.0f];
cell.user_photoProfile.contentMode = UIViewContentModeScaleAspectFill;
[cell.user_photoProfile loadInBackground];
NSString *str = [filteredObject objectForKey:NPUserKey_NOMECOGNOME];
cell.label_UserNomeCognome.text = str;
cell.itemText = str;
}
始终在cellForRowAtIndexPath中我使用布尔筛选用户进入搜索模式
- (void)viewDidLoad {
[super viewDidLoad];
self.buttonPressedSelectedRowArray = [[NSMutableArray alloc] init];
int i = NO;
for (i=0; i<20; i++) {
[self.buttonPressedSelectedRowArray addObject:[NSNumber numberWithInt:NO]];
}
}
UIButton *myButton = (UIButton *)[cell.myContentView viewWithTag:100];
UIImage *imageFriendAdd = [UIImage imageNamed:@"On_userAddFriend@2x"];
if (myButton == nil) {
myButton = [UIButton buttonWithType:UIButtonTypeSystem];
myButton.frame = CGRectMake(264.0, 30.0, 30.0, 30.0);
[myButton setBackgroundImage:imageFriendAdd forState:UIControlStateNormal];
myButton.tag = 100;
[myButton addTarget:self action:@selector(tapped:andEvent:) forControlEvents:UIControlEventTouchUpInside];
[cell.myContentView addSubview:myButton];
NSLog(@" BUTTON CREATED !!!");
} else {
}
if ([self.buttonPressedSelectedRowArray [indexPath.row] boolValue]) {
UIImage *imageFriendAddOn = [UIImage imageNamed:@"On_userAddFriend@2x"];
[myButton setBackgroundImage:imageFriendAddOn forState:UIControlStateNormal];
}
else {
UIImage *imageFriendAddOff = [UIImage imageNamed:@"Off_userAddFriend@2x"];
[myButton setBackgroundImage:imageFriendAddOff forState:UIControlStateNormal];
}
PFObject *object = [userArray objectAtIndex:indexPath.row];
if (!isFiltered) {
cell.user_photoProfile.image = [UIImage imageNamed:@"camera"];
cell.user_photoProfile.layer.masksToBounds = YES;
cell.user_photoProfile.layer.cornerRadius = 3.0f;
cell.user_photoProfile.contentMode = UIViewContentModeScaleAspectFill;
cell.user_photoProfile.file = [object objectForKey:NPUserKey_PHOTOPROFILE];
[cell.user_photoProfile loadInBackground];
NSString *nameText = [object objectForKey:NPUserKey_NOMECOGNOME];
cell.label_UserNomeCognome.text = nameText;
cell.itemText = nameText;
}
else {
PFObject *filteredObject = [filteredUserArray objectAtIndex:indexPath.row];
cell.user_photoProfile.file = [filteredObject objectForKey:NPUserKey_PHOTOPROFILE];
cell.user_photoProfile.image = [UIImage imageNamed:@"camera"];
[cell.user_photoProfile.layer setMasksToBounds:YES];
[cell.user_photoProfile .layer setCornerRadius:5.0f];
cell.user_photoProfile.contentMode = UIViewContentModeScaleAspectFill;
[cell.user_photoProfile loadInBackground];
NSString *str = [filteredObject objectForKey:NPUserKey_NOMECOGNOME];
cell.label_UserNomeCognome.text = str;
cell.itemText = str;
}
然而,这是UISearchBar的过滤器结构
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *) searchText{
if (searchText.length ==0){
isFiltered = NO;
}
else {
isFiltered = YES;
filteredUserArray=[[NSMutableArray alloc]init];
for(PFObject *object in self.userArray) {
NSString *str = [object objectForKey:NPUserKey_NOMECOGNOME];
NSRange stringRange =[str rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (stringRange.location !=NSNotFound) {
[filteredUserArray addObject:object];
}
}
}
[tableViewFindUser reloadData];
}
同时添加所选按钮的方法
-(void)tapped:(UIButton *)sender andEvent:(UIEvent *)event {
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableViewFindUser];
NSIndexPath *indexPath = [self.tableViewFindUser indexPathForRowAtPoint:currentTouchPosition];
if ([self.buttonPressedSelectedRowArray[indexPath.row]boolValue]) {
[self.buttonPressedSelectedRowArray replaceObjectAtIndex:indexPath.row withObject:@(0)];
UIImage *imageFriendAddOff = [UIImage imageNamed:@"Off_userAddFriend@2x"];
[sender setBackgroundImage:imageFriendAddOff forState:UIControlStateNormal];
sender.transform = CGAffineTransformMakeScale(0.1,0.1);
[UIView beginAnimations:@"fadeInNewView" context:NULL];
[UIView setAnimationDuration:0.3];
sender.transform = CGAffineTransformMakeScale(1.0,1.0);
sender.alpha = 1.0f;
[UIView commitAnimations];
PFUser *userFiltered = [self.userArray objectAtIndex:indexPath.row];
PFQuery *query = [PFQuery queryWithClassName:NPFriendClass];
[query whereKey:NPFriend_DaUser equalTo:[PFUser currentUser]];
[query whereKey:NPFriendRequestStatus equalTo:@"Richiesta In Attesa"];
[query whereKey:@"OBJECT_USER_ID" equalTo:userFiltered.objectId];
[query includeKey:NPFriend_AUser];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error) {
for (PFObject *object in objects) {
NSLog(@"ELIMINATO: %@", object);
[object deleteInBackground];
}
}
else {
NSLog(@"Error: %@", [error localizedDescription]);
}
}];
} else {
[self.buttonPressedSelectedRowArray replaceObjectAtIndex:indexPath.row withObject:@(1)];
UIImage *imageFriendAddOn = [UIImage imageNamed:@"On_userAddFriend@2x"];
[sender setBackgroundImage:imageFriendAddOn forState:UIControlStateNormal];
sender.transform = CGAffineTransformMakeScale(0.1,0.1);
[UIView beginAnimations:@"fadeInNewView" context:NULL];
[UIView setAnimationDuration:0.3];
sender.transform = CGAffineTransformMakeScale(1.0,1.0);
sender.alpha = 1.0f;
[UIView commitAnimations];
PFObject *richiesta = [PFObject objectWithClassName:NPFriendClass];
if (!isFiltered) {
PFUser *userNotFiltered = [self.userArray objectAtIndex:indexPath.row];
[richiesta setObject:userNotFiltered forKey:NPFriend_AUser];
[richiesta setObject:userNotFiltered.objectId forKey:@"OBJECT_USER_ID"];
[richiesta setObject:userNotFiltered.username forKey:@"Username"];
[richiesta setObject:[PFUser currentUser] forKey:NPFriend_DaUser];
[richiesta setObject:@"Richiesta In Attesa" forKey:NPFriendRequestStatus];
[richiesta setValue:[NSNumber numberWithBool:YES] forKey:@"RECORD_INSERT"];
[richiesta saveInBackground];
NSLog(@"AMICO: %@", richiesta);
}
else {
PFUser *userFiltered = [self.filteredUserArray objectAtIndex:indexPath.row];
[richiesta setObject:userFiltered forKey:NPFriend_AUser];
[richiesta setObject:[PFUser currentUser] forKey:NPFriend_DaUser];
[richiesta setObject:@"Richiesta In Attesa" forKey:NPFriendRequestStatus];
[richiesta saveInBackground];
}
}
}
不要在另一个数组中保存状态,请在正常模式或搜索模式下使用同一数组。对于同一数组,请为该对象添加另一个键,并在该数组中保存状态。您好。。。我尝试使用相同的数组self.buttonPressedSelectedRowArray,我为未筛选的myButton1=创建了mybutton和myButton1=mybutton,但似乎不起作用。。。我还试着给非过滤和过滤的标签100到101,即使这样似乎也行。。。我误解了您想告诉我的内容???在按钮操作中,您需要更改self.buttonPressedSelectedRowArray数组中的值。你在这么做。请原谅,我的英语不是很好。D:你能给我一个你说什么的例子吗?为了更好地理解,我还用所选按钮的方法编辑了我的文章