2017-03-22 71 views
3

我想填充我ViewController內3個不同TableViews(不同tableviews出現基於選擇的UISegmentControl) - sidetableViewneighboursView,和friendsView。前兩個填充完美,但第三個(neighboursView)似乎沒有加載單元格。見下面的代碼。任何想法爲什麼?我覺得我在定義第三個筆尖viewdidLoad錯了?的iOS - 三TableView中的視圖控制器不加載筆尖

ViewController.h

- (IBAction)segmentControl:(id)sender; 
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentControl; 
@property (weak, nonatomic) IBOutlet UITableView *sidetableView; 
@property (strong, nonatomic) NSMutableArray *myFriendData; 
@property (weak, nonatomic) IBOutlet UITableView *neighboursView; 
@property (strong, nonatomic) NSMutableArray *friendData; 
@property (strong, retain) NSMutableArray *neighbourData; 

@property (strong, nonatomic) IBOutlet UITableView *friendsView; 

ViewController.m

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     UINib *nib = [UINib nibWithNibName:@"sidebarCell" bundle:nil]; 
     [self.friendsView registerNib:nib forCellReuseIdentifier: @"sidebarCell"]; 
     nib = [UINib nibWithNibName:@"MyFriendTableViewCell" bundle:nil]; 
     [self.sidetableView registerNib:nib forCellReuseIdentifier: @"MyFriendTableViewCell"]; 
     nib = [UINib nibWithNibName:@"sidebarCell" bundle:nil]; 
     [self.neighboursView registerNib:nib forCellReuseIdentifier: @"sidebarCell"]; 
} 

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView == self.sidetableView) { 
     if ([self.myFriendData count] > 0) { 
      return [self.myFriendData count]; 
     } else { 
      return 0; 
     } 
    } 
    if (tableView == self.friendsView) { 
     if ([self.friendData count] > 0) { 
      return [self.friendData count]; 

     } else { 
      return 0; 
      } 
    } 
    else { 

     // return [self.neighbourData count]; 

    } 
    return 0; 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
     if (tableView == self.sidetableView) { 
       self.sidetableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
      MyFriendTableViewCell *cell = (MyFriendTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MyFriendTableViewCell"]; 
      NSDictionary *friendsName = [self.myFriendData objectAtIndex:indexPath.row]; 
      [[cell friendName] setText:[friendsName objectForKey:@"title"]]; 
      NSDictionary *friendsBio = [self.myFriendData objectAtIndex:indexPath.row]; 
      [[cell friendBio] setText:[friendsBio objectForKey:@"field_friendbio"][@"und"][0][@"safe_value"]]; 
      NSString *profilePath = [[self.myFriendData objectAtIndex:indexPath.row] objectForKey:@"field_picture"][@"und"][0][@"safe_value"]; 
      [cell.friendPic sd_setImageWithURL:[NSURL URLWithString:profilePath]]; 
      NSLog(@"This is profilePath %@",profilePath); 
      return cell; 
    } 
    if (tableView == self.friendsView) 
    { 
      self.friendsView.separatorStyle = UITableViewCellSeparatorStyleNone; 
      sidebarCell *cell = (sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@"sidebarCell"]; 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"sidebarCell" owner:self options:nil]; 
      cell = [nib objectAtIndex:0]; 
      NSDictionary *userName = [self.friendData objectAtIndex:indexPath.row]; 
      [[cell username] setText:[userName objectForKey:@"node_title"]]; 

      NSDictionary *userBio = [self.friendData objectAtIndex:indexPath.row]; 
      [[cell userDescription] setText:[userBio objectForKey:@"body"]]; 
      NSString *profilePath = [[self.friendData objectAtIndex:indexPath.row] objectForKey:@"friendphoto"]; 
      [cell.usermini sd_setImageWithURL:[NSURL URLWithString:profilePath]]; 
      return cell; 

     } else { 
      sidebarCell *cell = (sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@"sidebarCell"]; 
      NSDictionary *userName = [self.neighbourData objectAtIndex:indexPath.row]; 
      [[cell username] setText:[userName objectForKey:@"first name"]]; 
       NSDictionary *userlast = [self.neighbourData objectAtIndex:indexPath.row]; 
       [[cell lastName] setText:[userlast objectForKey:@"last name"]]; 
       NSDictionary *userBio = [self.neighbourData objectAtIndex:indexPath.row]; 
       [[cell userDescription] setText:[userBio objectForKey:@"userbio"]]; 
       NSString *profilePath = [[self.neighbourData objectAtIndex:indexPath.row] objectForKey:@"photo_path"]; 
       [cell.usermini sd_setImageWithURL:[NSURL URLWithString:profilePath]]; 
       NSLog(@"This is profilePath %@",profilePath); 
     } 
     /*UITableViewCell *cell; 
     return cell;*/ Never put this line in your code otherwise your tableview cell its nil 
    } 
    - (IBAction)segmentControl:(id)sender { 

     UISegmentedControl *segmentedControl = (UISegmentedControl *) sender; 
     NSInteger selectedSegment = segmentedControl.selectedSegmentIndex; 

     switch (selectedSegment) 
     { 
      case 0: 
        [self.sidetableView setHidden:NO]; 
        [self.neighboursView setHidden:YES]; 
        [self.friendsView setHidden:YES]; 

        NSLog(@"Requests!"); 
        break; 
      case 1: //FRIENDS MAP VIEW 

        [self.sidetableView setHidden:YES]; 
        [self.friendsView setHidden:NO]; 
        [self.neighboursView setHidden:YES]; 
        break; 
      case 2: 

        [self.sidetableView setHidden:YES]; 
        [self.neighboursView setHidden:NO]; 
        [self.friendsView setHidden:YES]; 
        break; 
      } 
    } 
+0

UINib *筆尖= [UINib nibWithNibName:@ 「sidebarCell」 捆綁:無]。 [self.friends查看registerNib:nib forCellReuseIdentifier:@「sidebarCell」]; UINib * nib1 = [UINib nibWithNibName:@「MyFriendTableViewCell」bundle:nil]; [self.sidetableView registerNib:nib1 forCellReuseIdentifier:@「MyFriendTableViewCell」]; UINib * nib2 = [UINib nibWithNibName:@「sidebarCell」bundle:nil]; [self.neighboursView registerNib:nib2 forCellReuseIdentifier:@「sidebarCell」];改變這個並運行 –

回答

1

當然你的第三個實現代碼如下無法加載電池的......你在你的第三個IF語句錯過return cell;。 ..

+0

我在我的第三條if語句中添加了return cell,並且我仍然得到一個空白tableView:/ – Brittany

+0

爲什麼你發佈了兩個答案?請刪除一個。 – rmaddy

0

試試這個方法

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    int numberOfRows; // this variable for return number of cell return 
    // here check your table 
    if (tableView == self.sidetableView) { 

      numberOfRows = [self.myFriendData count]; 
    }else if (tableView == self.friendsView) { 

      numberOfRows = [self.friendData count]; 
    }else if (tableView == self.neighboursView) { 

      numberOfRows = [self.neighbourData count]; 
    }else { 
      numberOfRows = 0; 
    } 
    return numberOfRows; 

} 
+0

無效:/ – Brittany

+0

在cellforrowatindexpath方法中添加這些行。其他部分 sidebarCell * cell =(sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@「sidebarCell」]; NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@「sidebarCell」owner:self options:nil]; cell = [nib objectAtIndex:0]; –

0

答案編輯你的代碼

ViewController.h

- (IBAction)segmentControl:(id)sender; 
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentControl; 
@property (weak, nonatomic) IBOutlet UITableView *sidetableView; 
@property (strong, nonatomic) NSMutableArray *myFriendData; 
@property (weak, nonatomic) IBOutlet UITableView *neighboursView; 
@property (strong, nonatomic) NSMutableArray *friendData; 
@property (strong, retain) NSMutableArray *neighbourData; 

我寧願使用weak參考,而不是strong

@property (weak, nonatomic) IBOutlet UITableView *friendsView; 

ViewController.m

我想你可能會錯過爲numberOfRowsInSection中的數組返回計數。我注意到另一個缺失的東西,你沒有返回cellcellForRowAtIndexPath爲你的neighboursView tableView。

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     //remove un-necessary code 
     UINib *nib = [UINib nibWithNibName:@"sidebarCell" bundle:nil]; 
     [self.friendsView registerNib:nib forCellReuseIdentifier: @"sidebarCell"]; 
     [self.neighboursView registerNib:nib forCellReuseIdentifier: @"sidebarCell"]; 
     nib = [UINib nibWithNibName:@"MyFriendTableViewCell" bundle:nil]; 
     [self.sidetableView registerNib:nib forCellReuseIdentifier: @"MyFriendTableViewCell"]; 
} 

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView == self.sidetableView) { 
     if ([self.myFriendData count] > 0) { 
      return [self.myFriendData count]; 
     } else { 
      return 0; 
     } 
    } 
    if (tableView == self.friendsView) { 
     if ([self.friendData count] > 0) { 
      return [self.friendData count]; 

     } else { 
      return 0; 
     } 
    } 
    else { 
     //Are you forgetting un-commenting this?? 
     // return [self.neighbourData count]; 
     return [self.neighbourData count]; 

    } 
    return 0; 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
     if (tableView == self.sidetableView) { 
      self.sidetableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
      MyFriendTableViewCell *cell = (MyFriendTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MyFriendTableViewCell"]; 
      NSDictionary *friendsName = [self.myFriendData objectAtIndex:indexPath.row]; 
      [[cell friendName] setText:[friendsName objectForKey:@"title"]]; 
      NSDictionary *friendsBio = [self.myFriendData objectAtIndex:indexPath.row]; 
      [[cell friendBio] setText:[friendsBio objectForKey:@"field_friendbio"][@"und"][0][@"safe_value"]]; 
      NSString *profilePath = [[self.myFriendData objectAtIndex:indexPath.row] objectForKey:@"field_picture"][@"und"][0][@"safe_value"]; 
      [cell.friendPic sd_setImageWithURL:[NSURL URLWithString:profilePath]]; 
      NSLog(@"This is profilePath %@",profilePath); 
      return cell; 
    } 
    if (tableView == self.friendsView) 
    { 
      self.friendsView.separatorStyle = UITableViewCellSeparatorStyleNone; 
      sidebarCell *cell = (sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@"sidebarCell"]; 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"sidebarCell" owner:self options:nil]; 
      cell = [nib objectAtIndex:0]; 
      NSDictionary *userName = [self.friendData objectAtIndex:indexPath.row]; 
      [[cell username] setText:[userName objectForKey:@"node_title"]]; 

      NSDictionary *userBio = [self.friendData objectAtIndex:indexPath.row]; 
      [[cell userDescription] setText:[userBio objectForKey:@"body"]]; 
      NSString *profilePath = [[self.friendData objectAtIndex:indexPath.row] objectForKey:@"friendphoto"]; 
      [cell.usermini sd_setImageWithURL:[NSURL URLWithString:profilePath]]; 
      return cell; 

     } else { 
      sidebarCell *cell = (sidebarCell *)[tableView dequeueReusableCellWithIdentifier:@"sidebarCell"]; 
      NSDictionary *userName = [self.neighbourData objectAtIndex:indexPath.row]; 
      [[cell username] setText:[userName objectForKey:@"first name"]]; 
      NSDictionary *userlast = [self.neighbourData objectAtIndex:indexPath.row]; 
      [[cell lastName] setText:[userlast objectForKey:@"last name"]]; 
      NSDictionary *userBio = [self.neighbourData objectAtIndex:indexPath.row]; 
      [[cell userDescription] setText:[userBio objectForKey:@"userbio"]]; 
      NSString *profilePath = [[self.neighbourData objectAtIndex:indexPath.row] objectForKey:@"photo_path"]; 
      [cell.usermini sd_setImageWithURL:[NSURL URLWithString:profilePath]]; 
      NSLog(@"This is profilePath %@",profilePath); 

      // are you forgetting to return cell? 
      return cell; 
     } 
    } 
    - (IBAction)segmentControl:(id)sender { 

     UISegmentedControl *segmentedControl = (UISegmentedControl *) sender; 
     NSInteger selectedSegment = segmentedControl.selectedSegmentIndex; 

     switch (selectedSegment) 
     { 
      case 0: 
        [self.sidetableView setHidden:NO]; 
        [self.neighboursView setHidden:YES]; 
        [self.friendsView setHidden:YES]; 

        NSLog(@"Requests!"); 
        break; 
      case 1: //FRIENDS MAP VIEW 

        [self.sidetableView setHidden:YES]; 
        [self.friendsView setHidden:NO]; 
        [self.neighboursView setHidden:YES]; 
        break; 
      case 2: 

        [self.sidetableView setHidden:YES]; 
        [self.neighboursView setHidden:NO]; 
        [self.friendsView setHidden:YES]; 
        break; 
     } 
} 
0

你的代碼沒有被執行,你必須

return cell; 

顯示它