• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 重新加载 UITableView 的内容

[复制链接]
菜鸟教程小白 发表于 2022-12-12 08:52:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在刷新 UITableView 的内容时遇到问题。我正在尝试在 UITableView 中显示成员列表。在此列表上方,我有一些用于组选择的下拉菜单。因此,如果我更改在下拉菜单中选择的组,我想更改它下面的 UITableView 的内容。它实际上无法正常工作。 第一次加载包含 UITableViewViewController 时,它会显示默认组中的正确成员列表。现在,当我更改组时,它应该显示我的新成员列表,但它没有。似乎 UITableView 甚至不会重新加载其表格内容。 这是我的 TableViewController 代码:

MemberTableViewController.m

- (void)viewDidLoad {
  [super viewDidLoad];

  self.members = [NSMutableArray new];
  self.selectedRows = [NSMutableArray new];
  self.groupManager = [GroupManager new];

  int *number;
  if (nil != [self gruppeId]) {
      number = [[self gruppeId] intValue]; // Here will be the id of the new selected group
  } else {
    number = 4010292; // This is just for testing. It's the id of my default group
  }

  for (Group *group in [self.groupManager findGroupWithID:[NSNumber numberWithInt:number]]) {

    for (Member *member in group.member) {
        [self.members addObject:member];
    }
  }

  NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey"name" ascending:YES selectorselector(caseInsensitiveCompare];
  [self.gruppenMitglieder sortUsingDescriptors:[NSArray arrayWithObject:sort]];
  [self.tableView setAllowsMultipleSelection:YES];
  [self.tableView reloadData];
}

- (NSInteger)tableViewUITableView *)tableView numberOfRowsInSectionNSInteger)section
{
    // Return the number of rows in the section.
    return  [[self members] count];
}

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath
{
    GreenTexturedCell *cell = nil;
    Member *member = [self members][indexPath.row];
    NSArray* views = [[NSBundle mainBundle] loadNibNamed"GreenTexturedCell" owner:nil    options:nil];

    for (UIView *view in views) {
        if([view isKindOfClass:[UITableViewCell class]]) {
            cell = (GreenTexturedCell*)view;
        }
    }


    cell.textLabel.text = member.name;
    cell.textLabel.font = [UIFont fontWithName"JandaCloserToFree" size:14.0];
    cell.textLabel.textColor = [UIColor whiteColor];

    return cell;
}

现在我有另一个ViewController MemberListViewController,它包含MemberTableViewController(我知道,命名不是最好的...) . MemberListViewController 实现了GroupSelectionTableViewController 的协议(protocol)。当所选组更改时,将调用其委托(delegate)函数。下面是 MemberListViewController 的代码: MemberListViewController.h

@interface MemberListViewController : UIViewController <GroupSelectionDelegate>
@property (weak, nonatomic) IBOutlet UIButton *groupSelection;
@property (nonatomic, strong) GroupSelectionTableViewController *groupTableView;
- (IBAction)groupSelectionPressedid)sender;
@end

MemberListViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setGroupTableView:[GroupSelectionTableViewController new]];
    [[self groupTableView] setDelegate:self];
}

- (IBAction)gruppeAuswahlPressedid)sender {

    if ([self groupListShown]) {
        [[[self groupTableView] view] removeFromSuperview];
        [self setGroupListShown:NO];
    } else {
        [self.view addSubview:[[self groupTableView] view]];
        [self setGroupListShown:YES];
    }
}

- (void) groupSelectionControllerGroupSelectionTableViewController *)groupSelection DidSelectGroupWithIdNSString *) groupId {
    [[self groupSelection] setTitle:name forState:UIControlStateNormal];
    [[[self groupTableView] view] removeFromSuperview];
    [self setGroupListShown:NO];
    MemberTableViewController *memberTableView = [self.storyboard instantiateViewControllerWithIdentifier"memberTable"];
    [memberTableView setGroupId:[NSNumber numberWithInt:4017411]]; // Id for testing
    [memberTableView refreshControl];

}

现在,如果我更改组选择,将调用 -groupSelectionControlleridSelectGroupWithId: 方法并使用 [memberTableView refreshControl] 我可以进入 <再次使用 MemberTableViewController 的 code>viewDidLoad 方法并将 groupId 设置为我的测试 ID。现在我希望 TableView 重新加载其内容以获取所选组的成员。使用语句 [self.tableView reloadData] 我进入 tableView:NumberOfRowsInSection: 方法,但没有进入 tableView:CellForRowAtIndexPath: 方法,并且 TableView 内容没有重绘.

我做错了什么? 这个问题把我逼疯了,所以我希望有人能帮助我。 谢谢



Best Answer-推荐答案


使用 instantiateViewControllerWithIdentifier 您正在创建 MemberTableViewController 的新实例,这不是您在屏幕上显示的实例。因此,您不会看到应该通过调用 reloadData 显示的更改。

为了能够重新加载表格数据,您可以在 MemberListViewController 中添加指向表格的链接。将.h的代码更改为:

#import "MemberTableViewController.h"
@interface MemberListViewController : UIViewController <GroupSelectionDelegate>
{
    IBOutlet MemberTableViewController *memberTableView;
}
@property (weak, nonatomic) IBOutlet UIButton *groupSelection;
@property (nonatomic, strong) GroupSelectionTableViewController *groupTableView;
- (IBAction)groupSelectionPressedid)sender;
@end

然后,在.m中,可以调用[memberTableView reloadData];

不要忘记在 Storyboard 文件中将 memberTableView 设置为“新引用导出”。

关于ios - 重新加载 UITableView 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14961729/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap