【问题标题】:Tableview data won't load when unsegmented control is changed更改未分段控件时不会加载 Tableview 数据
【发布时间】:2015-07-10 13:16:04
【问题描述】:

//tableview 没有变化。我已经在这几天了。看起来很简单。谢谢你的帮助

#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;
    
}

pragma mark - 表格视图数据源

- (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;
}

pragma mark - 表视图委托

// 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

【问题讨论】:

    标签: ios uitableview uisegmentedcontrol


    【解决方案1】:

    在调用 table reload 方法之前检查您的数据源数组,并确保该数组包含与您选择的段相对应的新值。

    【讨论】:

    • 我对 iOS 开发有点陌生。所以你的意思是我需要在 valueChanged 中做些别的事情?如何更改数据源?
    • 您的 valueChanged 函数正在正确调用,并且在其中您正在调用 tableview reload 方法。当你调用 reload 时,UITableView 数据源会再次被调用。因此,要更改加载到 tableview 中的数据,您需要更改用于加载 tableview 的数组中的数据。
    • 好的,让我确保我正确理解你。我需要一个数组填充表格视图。在 valueChanged 内部,我需要更改设置视图的数组。
    • 那行得通。谢谢你。但是现在当我单击该选项卡时,表格最初是空的。如何让数据立即加载?再次感谢
    • 是的,你是对的。还要确保代理和数据源设置正确。
    【解决方案2】:

    在处理表格视图时我经常遇到的一件事是使用界面构建器将表格与界面连接起来。因为听起来你正在加载数据,当视图第一次加载时。但是,如果您在没有与表建立连接的情况下调用 [self.tableView reloadData],则不会发生任何事情。

    我忘记了那个超级简单的步骤。希望这有帮助

    【讨论】:

      【解决方案3】:

      您是否设置了 tableview 委托?

      尝试将其放入您的 viewDidLoad 函数中。

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

      如果您需要更全面的解释,请查看此处:

      how to set a tableview delegate

      该帖子还解释了如何确保您的班级订阅 UITableViewDelegate 和 UITableViewDataSource 协议

      希望对您有所帮助。

      【讨论】:

      • 是的,我没有遵守代表。我的 .h 文件 中有 at 设置
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多