重新加载UITableView的内容

时间:2013-02-19 15:57:14

标签: ios uitableview

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

MemberTableViewController.m

TableViewController

现在我有另一个- (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 selector:@selector(caseInsensitiveCompare:)]; [self.gruppenMitglieder sortUsingDescriptors:[NSArray arrayWithObject:sort]]; [self.tableView setAllowsMultipleSelection:YES]; [self.tableView reloadData]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return [[self members] count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)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的代码: MemberListViewController.h

MemberListViewController

MemberListViewController.m

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

}

现在,如果我更改了群组选择,则会调用- (void)viewDidLoad { [super viewDidLoad]; [self setGroupTableView:[GroupSelectionTableViewController new]]; [[self groupTableView] setDelegate:self]; } - (IBAction)gruppeAuswahlPressed:(id)sender { if ([self groupListShown]) { [[[self groupTableView] view] removeFromSuperview]; [self setGroupListShown:NO]; } else { [self.view addSubview:[[self groupTableView] view]]; [self setGroupListShown:YES]; } } - (void) groupSelectionController:(GroupSelectionTableViewController *)groupSelection DidSelectGroupWithId:(NSString *) 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]; 方法并使用-groupSelectionController:DidSelectGroupWithId:我可以再次进入[memberTableView refreshControl] viewDidLoad方法并将groupId设置为我的测试ID。现在我希望TableView重新加载其内容以获取所选组的成员。使用语句MemberTableViewController我将进入[self.tableView reloadData]方法但不进入tableView:CellForRowAtIndexPath:Method并且不重绘TableView内容。

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

1 个答案:

答案 0 :(得分:1)

使用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)groupSelectionPressed:(id)sender;
@end

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

不要忘记在情节提要文件中将memberTableView设置为“新引用插座”。