2013-02-19 2 views
2

UITableView의 내용을 새로 고침하는 데 문제가 있습니다. UITableView에 회원 목록을 표시하려고합니다. 이 목록 위에는 그룹 선택을위한 일종의 드롭 다운 메뉴가 있습니다. 그래서 드롭 다운 메뉴에서 선택한 그룹을 변경하면 그 아래에있는 UITableView의 내용을 변경하려고합니다. 실제로 제대로 작동하지 않습니다. UITableView이 포함 된 ViewController을 처음로드하면 기본 그룹에 올바른 구성원 목록이 표시됩니다. 이제 그룹을 변경하면 구성원 목록이 새로 표시되지만 표시되지는 않습니다. UITableView은 테이블 내용을 다시로드하지 않는 것으로 보입니다. 가 여기에 TableViewController 내 코드입니다 : 지금은 다른 ViewControllerMemberListViewController, 그것은이 MemberTableViewController 포함되어 있습니다Reload Content of 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; 
} 

(내가 아는을 명명은 ... 최고의 아니다). MemberListViewControllerGroupSelectionTableViewController의 프로토콜을 구현합니다. 선택된 그룹이 변경되면 델리게이트 함수가 호출됩니다. 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: 방법이 호출되고,

이제 다음은 MemberListViewController의 코드는 [memberTableView refreshControl]MemberTableViewController의 방법으로 다시 들어가서 groupId를 테스트 ID로 설정할 수 있습니다. 이제 TableView에서 선택한 그룹의 구성원을 가져 오기 위해 내용을 다시로드해야합니다. 성명 [self.tableView reloadData]tableView:NumberOfRowsInSection: 방법으로 들어갈 수 있지만 tableView : CellForRowAtIndexPath : 메서드 및 TableView 내용으로 다시 그려지지 않습니다. 내가 잘못 뭐하는 거지

? 이 문제는 나를 괴롭 히고 있습니다. 그래서 나를 도와 줄 누군가가 있기를 바랍니다. 감사합니다.

+0

numberOfRowsInSection이 반환하는 항목을 기록 했습니까? 일반적으로 그 메소드가 호출되었지만 cellForRowAtIndexPath가 아닌 경우, 행 수가 0이기 때문입니다. – rdelmar

+0

예. 처음으로 12를 반환하면 그룹을 변경하면 선택한 그룹의 올바른 멤버 수인 6이 반환됩니다. – matthisb

+0

테이블이 다시 그려지지 않는 약간의 길을 잃었습니다. 회원 테이블보기입니까? 그렇다면 [memberTableView refreshControl]을 [memberTableView reloadData]로 변경하고 도움이되는지 확인하십시오. – rdelmar

답변

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