2015-07-10 3 views
2

// Вид таблицы не изменяется. Я был в этом несколько дней. Это кажется таким простым. Спасибо за вашу помощьДанные таблицы не загружаются при изменении несегментированного управления

#import "StopsTableViewController.h" 

static NSString *MyIdentifier = @"RouteListing"; 

@interface StopsTableViewController() 

@property (strong, nonatomic) NSArray *TESTARRAY; 

@end 


@implementation StopsTableViewController 

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 

    if (self) { 
     //Set the tab bar item's title 
     self.title = @"Stops"; 

    }   

    self.stopList = [[API sharedAPI] fetchStopListing]; 

    self.TESTARRAY = @[@"Josh", @"Kyle", @"Nate"]; 

    return self; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyIdentifier]; 

    // Adds Segmented Control 
    [self segmentedView];  

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void) segmentedView { 
    NSArray *segmentedMenu = [NSArray arrayWithObjects:@"All", @"Near Me", nil]; 
    UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentedMenu]; 
    [segmentedControl addTarget:self 
         action:@selector(valueChanged:) 
       forControlEvents:UIControlEventValueChanged]; 

    segmentedControl.selectedSegmentIndex = 0; 
    self.navigationItem.titleView = segmentedControl; 

} 

Прагма марки - Просмотр таблицы источника данных

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if ([self.segmentedControl selectedSegmentIndex] == 0) { 
     return [self.stopList count]; 

    } 
    else { 
     return [self.TESTARRAY count]; 

    } 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MyIdentifier]; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

    if (_segmentedControl.selectedSegmentIndex == 0) { 

      cell.textLabel.text = [[self.stopList objectAtIndex:indexPath.row] objectForKey:@"stoptitle"]; 
      cell.detailTextLabel.text = [NSString stringWithFormat:@"Stop %@", [[self.stopList objectAtIndex:indexPath.row] objectForKey:@"stopnumber"]]; 
    } 

    else { 
     cell.textLabel.text = self.TESTARRAY[indexPath.row]; 

    } 

    return cell; 
} 

Прагма марки - Таблица вид делегата

// In a xib-based application, navigation from a table can be handled in -tableView:didSelectRowAtIndexPath: 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Navigation logic may go here, for example: 
    // Create the next view controller. 
    StopInfoViewController *detailViewController = [[StopInfoViewController alloc] initWithNibName:@"StopInfoViewController" bundle:nil]; 

    // Pass the selected object to the new view controller. 

    detailViewController.stopInfo = [[self.stopList objectAtIndex:indexPath.row] objectForKey:@"stopnumber"]; 

    detailViewController.stopName = [[self.stopList objectAtIndex:indexPath.row] objectForKey:@"stoptitle"]; 


    // Push the view controller. 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
} 


//Function for segmentedView 
-(void) valueChanged:(UISegmentedControl *)sender { 

    [self.tableView reloadData]; 
    NSLog(@"I'm getting called segment number is: %ld", (long)sender.selectedSegmentIndex); 

} 

@end 

ответ

1

Проверьте массив источника данных перед вызовом метода таблицы перезагрузки и убедитесь, что массив содержит новые значения, соответствующие выбранному сегменту.

+0

Я добрая для развития iOS. Итак, что вы говорите, мне нужно сделать что-то еще в valueChanged? Как я могу изменить источник данных? –

+0

Функция valueChanged вызывает правильно и внутри, что вы вызываете метод перезагрузки tableview. Когда вы вызываете reload, UITableView datasource снова вызывается. Поэтому для изменения данных, загружаемых в tableview, вам необходимо изменить данные внутри массива, который использовался для загрузки tableview. –

+0

Итак, позвольте мне убедиться, что я правильно вас понимаю. Мне нужно, чтобы один массив заполнил таблицу. И внутри valueChanged мне нужно изменить, какой массив устанавливает представление. –

0

Вы установили делегатов таблицы?

Попробуйте поместить это в свою функцию viewDidLoad.

[tableView setDelegate:self]; 
[tableView setDataSource:self]; 

Если вы хотите более полное объяснение, проверьте здесь:

how to set a tableview delegate

Это сообщение также объясняет, как обеспечить ваш класс поддерживает протоколы UITableViewDelegate и UITableViewDataSource

Надежда, что помогает.

+0

Да, я не согласен с делегатами. У меня есть настройка в моем .h файле

0

Одна вещь, с которой я всегда сталкиваюсь, когда борьба с табличным видом соединяет таблицу с интерфейсом с помощью конструктора интерфейсов. Потому что кажется, что вы загружаете данные, когда сначала загружается представление. Но когда вы вызываете [self.tableView reloadData] без подключения к таблице, ничего не произойдет.

Я так забыл, что супер простой шаг. Надеюсь, это помогло

Смежные вопросы