我在刷新UITableView
的內容時遇到問題。我試圖在UITableView
中顯示成員列表。在此列表的上方,我有一些用於組選擇的下拉菜單。所以,如果我更改了在下拉菜單中選擇的組,我想更改它下面的UITableView的內容。它實際上不能正常工作。 我第一次加載包含UITableView
的ViewController
時,它會顯示默認組中的正確成員列表。現在,當我更改組時,它應該顯示我的新成員列表,但它不會。看起來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;
}
現在我有另一個ViewController
的MemberListViewController
,它包含了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]
我可以再次進入MemberTableViewController
的viewDidLoad
方法,並將groupId設置爲我的測試ID。現在我希望TableView重新加載其內容以獲取所選組的成員。隨着聲明[self.tableView reloadData]
我進入tableView:NumberOfRowsInSection:
方法,但不進入tableView:CellForRowAtIndexPath:方法和TableView內容不重繪。
我在做什麼錯? 這個問題讓我瘋狂,所以我希望有人能幫助我。 感謝
你記錄了什麼numberOfRowsInSection正在返回?通常,如果該方法被調用,但不是cellForRowAtIndexPath,這是因爲行數爲0. – rdelmar 2013-02-19 16:05:10
是的。第一次當我改變組時它返回12,它返回6,這是所選組中成員的正確數目。 – matthisb 2013-02-19 16:06:51
我有點迷失在哪張表不重繪。是的memberTableView?如果是這樣,請將[memberTableView refreshControl]更改爲[memberTableView reloadData]並查看是否有幫助。 – rdelmar 2013-02-19 16:15:31