2013-02-19 100 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