单击tableview中的按钮时,从其他viewcontroller重新加载UITableView

时间:2017-05-15 09:30:47

标签: ios objective-c iphone xcode uitableview

从其他viewcontroller调用时,我遇到了重新加载UITableView的问题。我从viewcontroller.m调用了一项服务,结果显示在tableviewcontroller.m中。这是我的问题,我在UITableViewCell中有一个按钮,当点击按钮时,表格应该重新加载或刷新。

以下是我的代码:

viewController.m

NSString * post = [[NSString alloc]initWithFormat:@"country=%@&state=%@&userId=%@",_txtSearchField.text,UserId];


NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"url"]];


tableviewcontroller.m


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    static NSString *CellIdentifier = @"Cell";

    customCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if(!cell)
    {
        cell = [[customCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    }


    NSArray *arr=[[profileArr objectAtIndex:indexPath.row] allKeys];

    cell.lblAge.text = [[[profileArr objectAtIndex:indexPath.row] valueForKey:key] valueForKey:@"Age"];

    cell.lblLocation.text = [[[profileArr objectAtIndex:indexPath.row] valueForKey:key] valueForKey:@"Address"];

    cell.lblProfession.text = [[[profileArr objectAtIndex:indexPath.row] valueForKey:key] valueForKey:@"Occupation"];

    }

-(void)buttonclick:(id)sender
{
    UIButton *btn = sender;

    NSArray *arr=[[profileArr objectAtIndex:btn.tag] allKeys];
    NSString *key=[arr objectAtIndex:0];

    NSMutableDictionary *userDict=[[profileArr objectAtIndex:btn.tag] objectForKey:key];
    NSString *str = [userDict objectForKey:@"UserId"];
    [self callbuttonService:str];
}


-(void)callbuttonService:(NSString *)OtherUserId
{
    //service is called
}

#pragma mark - MRConnection Delegate Methods

- (void)jsonData:(NSDictionary *)jsonDict
{
    [SVProgressHUD dismiss];

        NSMutableArray *jsonArr1;

        jsonArr1=[jsonDict objectForKey:@"DataTable"];

        if (![jsonArr1 isEqual:[NSNull null]]) {

            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Employee" message:@"Sucess" preferredStyle:UIAlertControllerStyleAlert];

            UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
            [alertController addAction:ok];

            [self presentViewController:alertController animated:YES completion:nil];
            [alertController.view setTintColor:[UIColor blackColor]];
        }
        else{
            [SVProgressHUD showErrorWithStatus:@"Something went wrong!"];
        }
    }

3 个答案:

答案 0 :(得分:1)

根据您的问题,您在viewcontroller.m文件中有调用服务,并且您想在tableviewcontroller.m文件中重新加载tableview。请试试这个。继续编码。

viewController.m

-(void)callbuttonService:(NSString *)OtherUserId
    {
        //service is called
    }

    #pragma mark - MRConnection Delegate Methods

    - (void)jsonData:(NSDictionary *)jsonDict
    {
        [SVProgressHUD dismiss];

            NSMutableArray *jsonArr1;

            jsonArr1=[jsonDict objectForKey:@"DataTable"];

            if (![jsonArr1 isEqual:[NSNull null]]) {

                NSDictionary *DictionaryData = [[NSDictionary alloc]init];
                [DictionaryData setValue:jsonArr1 forKey:@"data"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"tableReload" object:nil userInfo:DictionaryData];
            }
            else{
                [SVProgressHUD showErrorWithStatus:@"Something went wrong!"];
            }
        }

tableviewcontroller.m

-(void)viewDidLoad() {
            super.viewDidLoad()
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tableReloadNotification:) name:@"tableReload" object:nil];

}
- (void) tableReloadNotification:(NSNotification *) notification {
        NSDictionary *info = notification.userInfo;
        if (info != nil) {
            NSMutableArray *jsonArr1 = [info valueForKey:@"data"];
            tableview.reloadData();
        }
}

答案 1 :(得分:0)

您可以使用NSNotificationCenter从另一个类重新加载表视图。当您的网络服务成功回复后,请发布您的本地通知。

答案 2 :(得分:0)

您是否尝试过调用[tableView reloadData]

此外,我无法看到您如何向默认UITableViewCell添加按钮。也许你想要这个:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
   // check if correct cell was tapped

  if (indexPath.section == 0 && indexPath.row == 0)
  {
      [tableView reloadData];
  }
}

当您实施此方法时,只要您点按UITableViewCell,就会调用它,您不需要按钮或其他内容。

当然,您可以将[tableView reloadData]绑定到应用中的任何其他操作,例如: G。工具栏中的按钮或其他东西。