2014-12-10 1 views
1

메뉴 컨트롤러에 두 개의 테이블 뷰가 있습니다. 첫 번째 tableview는 db에서 동적 메뉴 목록을 채우고 두 번째 tableview는 내가 말한 문자열 만 표시해야합니다. 이제는 설정과 로그인이라는 2 개의 셀만 있으면됩니다. 첫 번째 테이블보기가 잘 작동합니다. 그러나 두 번째 항목을 표시하지 않습니다. 코드는 두 번째의 tableview두 번째 TableView가 화면에 나타나지 않습니다.

의 viewDidLoad을 나타내는 벨로

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.slidingViewController setAnchorRightRevealAmount:280.0f]; 
    self.slidingViewController.underLeftWidthLayout = ECFullWidth; 
    self.view.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 
    self.tableView.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 
    self.tableView.separatorColor = [UIColor colorWithWhite:0.15f alpha:0.2f]; 
    self.extraTableView.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 
    self.extraTableView.separatorColor = [UIColor colorWithWhite:0.15f alpha:0.2f]; 
} 

기본 테이블

-(void)setMenuItems:(NSArray *)menuItems 
{ 
    if(_menuItems != menuItems) 
    { 
     _menuItems = menuItems; 
    } 
    [self.tableView reloadData]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionIndex 
{ 
    return self.menuItems.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *cellIdentifier = @"MenuItemCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    } 

    Department *dept = [self.menuItems objectAtIndex:indexPath.row]; 

    cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; 
    cell.textLabel.numberOfLines = 0; 
    cell.textLabel.text = dept.name; 
    cell.textLabel.textColor = [UIColor whiteColor]; 
    cell.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 

    UIView *myBackView = [[UIView alloc] initWithFrame:cell.frame]; 
    myBackView.backgroundColor = [UIColor redColor]; 
    cell.selectedBackgroundView = myBackView; 
    return cell; 
} 

두 번째 테이블이 뭐가 문제

-(void)setExtraMenuItems:(NSArray *)extraMenuItems 
{ 
    if(_extraMenuItems != extraMenuItems) 
    { 
     _extraMenuItems = extraMenuItems; 
    } 
    [self.extraTableView reloadData]; 
}  

- (NSInteger)extraTableView:(UITableView *)extraTableView numberOfRowsInSection:(NSInteger)sectionIndex 
{ 
    return self.extraMenuItems.count; 
} 

- (UITableViewCell *)extraTableView:(UITableView *)extraTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Formal"; 

    UITableViewCell *cell = [extraTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 

    [_extraMenuItemFiller addObject:@"Settings"]; 
    [_extraMenuItemFiller addObject:@"Logout"]; 

    NSString *cellValue = [_extraMenuItemFiller objectAtIndex:indexPath.row]; 

    cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; 
    cell.textLabel.numberOfLines = 0; 
    cell.textLabel.text = cellValue; 
    cell.textLabel.textColor = [UIColor blackColor]; 
    cell.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 

    UIView *myBackView = [[UIView alloc] initWithFrame:cell.frame]; 
    myBackView.backgroundColor = [UIColor redColor]; 
    cell.selectedBackgroundView = myBackView; 

    return cell; 
} 

?

+0

은'extraTableView를 호출하기위한 논리는 무엇인가 : ...'방법 ? 테이블 뷰가 자동으로 찾는 이름은 아닙니다. –

답변

1

tableView 대리자 및 데이터 소스 메서드의 이름을 바꾸면 안됩니다. 전달되는 tableView 매개 변수를 테스트하여 관련 tableView를 확인하십시오. 예를 들면 다음과 같습니다.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionIndex 
{ 
    if (tableView == self.extraTableView) { 
     return self.extraMenuItems.count; 
    } else { 
     return self.menuItems.count; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == self.extraTableView) { 
     NSString *CellIdentifier = @"Formal"; 

     UITableViewCell *cell = [extraTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
     } 

     [_extraMenuItemFiller addObject:@"Settings"]; 
     [_extraMenuItemFiller addObject:@"Logout"]; 

     NSString *cellValue = [_extraMenuItemFiller objectAtIndex:indexPath.row]; 

     cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; 
     cell.textLabel.numberOfLines = 0; 
     cell.textLabel.text = cellValue; 
     cell.textLabel.textColor = [UIColor blackColor]; 
     cell.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 

     UIView *myBackView = [[UIView alloc] initWithFrame:cell.frame]; 
     myBackView.backgroundColor = [UIColor redColor]; 
     cell.selectedBackgroundView = myBackView; 

     return cell; 
    } else { 
     NSString *cellIdentifier = @"MenuItemCell"; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
     } 

     Department *dept = [self.menuItems objectAtIndex:indexPath.row]; 

     cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; 
     cell.textLabel.numberOfLines = 0; 
     cell.textLabel.text = dept.name; 
     cell.textLabel.textColor = [UIColor whiteColor]; 
     cell.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 

     UIView *myBackView = [[UIView alloc] initWithFrame:cell.frame]; 
     myBackView.backgroundColor = [UIColor redColor]; 
     cell.selectedBackgroundView = myBackView; 
     return cell; 
    } 
} 

마찬가지로 다른 모든 tableView 대리인 및 데이터 소스 메서드에 대해서도 마찬가지입니다. 또한 위임 및 데이터 소스가 두 테이블보기에 모두 설정되어 있는지 확인해야합니다. 스토리 보드 나 코드에서이 작업을 수행 할 수 있습니다. viewDidLoad에서 :

self.extraTableView.delegate = self; 
self.extraTableView.datasource = self; 

편집

당신은 extraMenuItems 및 extraMenuItemFiller 모두 필요하지 않습니다. 난 그냥 extraMenuItems를 사용합니다. 다음과 같이 viewDidLoad에있는 두 개의 값을로드합니다

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.slidingViewController setAnchorRightRevealAmount:280.0f]; 
    self.slidingViewController.underLeftWidthLayout = ECFullWidth; 
    self.view.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 
    self.tableView.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 
    self.tableView.separatorColor = [UIColor colorWithWhite:0.15f alpha:0.2f]; 
    self.extraTableView.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f]; 
    self.extraTableView.separatorColor = [UIColor colorWithWhite:0.15f alpha:0.2f]; 
    self.extraMenuItems = @[@"Login",@"Settings"]; 
    self.extraTableView.delegate = self; 
    self.extraTableView.datasource = self; 
} 

및 extraMenuItems보다는를 사용하도록 cellForRowAtIndexPath을 개정 extraMenuItemFiller :

NSString *cellValue = [self.extraMenuItems objectAtIndex:indexPath.row]; 
관련 문제