2

のコンテンツの更新に問題がありUITableViewます。にメンバーのリストを表示しようとしていますUITableView。このリストの上に、グループ選択のためのある種のドロップダウンメニューがあります。したがって、ドロップダウンメニューで選択したグループを変更する場合は、その下にあるUITableViewのコンテンツを変更します。実際には正しく機能していません。ViewControllerを含むを初めてロードするとUITableView、デフォルトグループのメンバーの正しいリストが表示されます。これで、グループを変更すると、新しいメンバーのリストが表示されますが、表示されません。UITableViewテーブルの内容をリロードすらしないようです。これが私のコードですTableViewController

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:メソッドが呼び出され、もう一度メソッドにアクセスして、groupIdをテストIDに設定[memberTableView refreshControl]できます。次に、TableViewにコンテンツをリロードして、選択したグループのメンバーを取得します。ステートメントを使用して、メソッドにはアクセスしますが、tableView:CellForRowAtIndexPath:メソッドにはアクセスしませんが、TableViewコンテンツは再描画されません。viewDidLoadMemberTableViewController[self.tableView reloadData]tableView:NumberOfRowsInSection:

私は何を間違っているのですか?この問題は私を狂わせているので、誰かが私を助けてくれることを願っています。ありがとう

4

1 に答える 1

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で、[memberTableViewreloadData]を呼び出すことができます。

memberTableViewストーリーボードファイル内で「新しい参照アウトレット」として設定することを忘れないでください。

于 2013-02-20T09:53:14.617 に答える