2013-02-19 78 views
2

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

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 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; 
} 

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

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

MemberListViewController.m

- (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]我可以再次进入MemberTableViewControllerviewDidLoad方法,并将groupId设置为我的测试ID。现在我希望TableView重新加载其内容以获取所选组的成员。随着声明[self.tableView reloadData]我进入tableView:NumberOfRowsInSection:方法,但不进入tableView:CellForRowAtIndexPath:方法和TableView内容不重绘。

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

+0

你记录了什么numberOfRowsInSection正在返回?通常,如果该方法被调用,但不是cellForRowAtIndexPath,这是因为行数为0. – rdelmar 2013-02-19 16:05:10

+0

是的。第一次当我改变组时它返回12,它返回6,这是所选组中成员的正确数目。 – matthisb 2013-02-19 16:06:51

+0

我有点迷失在哪张表不重绘。是的memberTableView?如果是这样,请将[memberTableView refreshControl]更改为[memberTableView reloadData]并查看是否有帮助。 – rdelmar 2013-02-19 16:15:31

回答

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作为故事板文件中的“新引用出路”。

+1

Greeeat!这对我有效。谢谢。我的tableView现在正在刷新正确 – matthisb 2013-02-20 10:04:02