如何在选择不同的uitable行的行时重新加载uitable

时间:2013-02-01 11:25:12

标签: iphone ios objective-c uitableview

我正在尝试在选择其他UITableView行的行时重新加载UITableView's。我遇到的一个问题是UITableView's都在同一个视图中。我想在Table1中选择一个选项来更改用于填充Table2的NSMutableArray。然后重新加载表格。

目前它工作正常,但只有当应用程序重新启动时(或视图从堆栈弹出然后重新访问)并再次调用viewWillAppear

这是我的代码:

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:NO];
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    self.navigationController.toolbarHidden = YES;
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

    // getting an NSString
    selectedTableString = [prefs stringForKey:@"selectedTableString"];
    if ([selectedTableString isEqualToString:@"Italy"]) {
        jsonStringCountry = @"http://****/v1/public/cities?country=it";
    }
    else if ([selectedTableString isEqualToString:@"Spain"]) {
        jsonStringCountry = @"http://****/v1/public/cities?country=es";
    }
    else if ([selectedTableString isEqualToString:@"UK"]) {
        jsonStringCountry = @"http://****/v1/public/cities?country=uk";
    }
    else if ([selectedTableString isEqualToString:@"Brazil"]) {
        jsonStringCountry = @"http://****/v1/public/cities?country=br";
    }
    NSLog(@"from two t selectedTableString %@",selectedTableString);

    // Download the yoodeal JSON
    NSString *jsonString = [NSString stringWithContentsOfURL:[NSURL URLWithString:jsonStringCountry] encoding:NSStringEncodingConversionAllowLossy|NSUTF8StringEncoding error:nil];
    NSLog(@"jsonStringCountry is %@", jsonStringCountry);
    NSMutableArray *itemsTMP = [[NSMutableArray alloc] init];

    // Create parser for the yoodeal api
    SBJSON *parser = [[SBJSON alloc] init];
    NSDictionary *results = [parser objectWithString:jsonString error:nil];
    itemsTMP = [results objectForKey:@"results"];
    self.displayItems = [itemsTMP copy];
}

我的UITableView方法:

- (int)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
- (int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [displayItems count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
    if(cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MainCell"];
    }

    // Get item from tableData
    NSDictionary *item = (NSDictionary *)[displayItems objectAtIndex:indexPath.row];
    cell.textLabel.text = [item objectForKey:@"name"];
    [cell.textLabel setFont:[UIFont fontWithName: @"Asap-Bold" size: 14.0f]];
    return cell;
}

4 个答案:

答案 0 :(得分:1)

为表格视图创建出口

 [self.yourTableView reloadData];

答案 1 :(得分:1)

使用[tablename reloadData]; onclick。

更新tableview内容时,它不会刷新视图。重新加载视图控制器后,您才能看到更改。 要立即更新表格,您需要调用上面的代码

答案 2 :(得分:1)

您应该创建一个名为secondTableView的UITableView属性,然后使用[secondTableView reloadData]

答案 3 :(得分:1)

您需要使用UITablveView的委托方法。方法是:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

单击UITableView行时会调用此方法。请按以下方式使用:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   if(tableView == Table1)
   {
        //do the changes in array you want to do.
        [table2 reloadData];
   }
   else
   {
        //do the changes in array you want to do.
        [table1 reloadData];
   }
}