Ios 使用UISearchBar时,UIButton不记得其在tableView中的状态

Ios 使用UISearchBar时,UIButton不记得其在tableView中的状态,ios,uitableview,uibutton,parse-platform,Ios,Uitableview,Uibutton,Parse Platform,我在tableview中重用自定义单元格时遇到问题 正如我所说,我的tableView有一个自定义单元格,其中有一个按钮,用于向特定单元格的用户发送或取消好友请求 在这个TableView中,我还有一个UISearchBar来过滤应用程序的用户 在正常模式下重复使用单元格可以很好地工作,但是当我去过滤时,用户无法保持按钮在正常模式下的状态 例如 TableView I搜索模式: 如果用户向Richard Marx发送请求,则按钮会正确地变为橙色,即使tableview没有发生任何事情,也不会太好

我在tableview中重用自定义单元格时遇到问题

正如我所说,我的tableView有一个自定义单元格,其中有一个按钮,用于向特定单元格的用户发送或取消好友请求

在这个TableView中,我还有一个UISearchBar来过滤应用程序的用户

在正常模式下重复使用单元格可以很好地工作,但是当我去过滤时,用户无法保持按钮在正常模式下的状态

例如

TableView I搜索模式:

如果用户向Richard Marx发送请求,则按钮会正确地变为橙色,即使tableview没有发生任何事情,也不会太好。。。但是,如果您使用UISearchBar,则与橙色按钮的匹配程度不超过“包含Richard Marx先生的单元格,而是与Abram Van Helsing先生的单元格,后者恰好是搜索模式下列表中的第一个单元格。”

我已经创建了一个适合用户点击的数组,但只有在不使用UISearchBar的情况下,它才似乎有效 你能帮我什么忙吗

这是用于过滤单元格中按钮状态的数组的实现

- (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:你能给我一个你说什么的例子吗?为了更好地理解,我还用所选按钮的方法编辑了我的文章