UITableView

时间:2017-01-09 14:21:31

标签: ios objective-c iphone uitableview

我已经使用了几个月的目标c,使用不同的基础课程,并且通常使用该语言。

根据我自己的经验,没有什么比UITableView更令人困惑;下面是一些没有太大作用的代码。

//the header file 
@interface SLDataBankListTableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>

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

@end

//implementation
@interface SLDataBankListTableViewController ()

@property (strong, nonatomic) SLDataSourceObject* dataSource;

@end

@implementation SLDataBankListTableViewController

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];
    _dataSource = [[SLDataSourceObject alloc] init];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _dataSource.dataBankNames.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell* cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"reuse"];
    cell.textLabel.text = [_dataSource.dataBankNames objectAtIndex:indexPath.row];

    return cell;
}

@end

我已经成功地使用了这个类十几次,每次我像现在一样犯了一些愚蠢的错误。最后,我鼓起勇气,决定寻求帮助。

这门课程的细微之处,细微差别是什么我似乎无法掌握?

编辑:这是一个小程序的一部分,它的其他部分工作正常,但表没有显示任何内容;已经建议一些重要的但没有解决问题的变化。

2 个答案:

答案 0 :(得分:1)

如果没有知道什么不起作用,调试有点困难,但我看到一些可能会帮助你的东西。

  1. UITableViewController有自己的tableview,但你似乎在一个nib中连接了另一个tableview。要么使用UITableViewController表格查看,要么创建自己的表格,不要同时使用。{/ li>
  2. cellForRowAtIndexPath中,您每次都在创建一个新单元格,而不是重复使用您拥有的单元格。
  3. 可以在viewWillAppear之前调用tableview的委托方法。您应该先创建数据源对象。我建议viewDidLoad:。 (另一个原因viewWillAppear是一个糟糕的选择,它可以被多次调用,并且你可以无缘无故地创建和销毁许多数据源对象) 希望有所帮助。

答案 1 :(得分:1)

关于表视图要记住的重要一点是,它是用户与对象数组交互的一种方式。数组由数据源表示,数据源方法描述视图需要知道的内容:

  1. 数组中有多少个对象(称为numberOfRowsInSection:
  2. 如何显示每个对象(称为cellForRowAtIndexPath:
  3. 要回答后一个问题,数据源必须回答视图。该视图的工作 - 就像任何视图一样 - 是为用户表示一个对象。在行中,表格视图使用UITableViewCell

    数据源阵列可以任意大,因此直接将UITableViewCells映射到其元素可能会在内存方面造成任意代价。表视图重用单元格,而不是为数组中的每个对象创建一个单元格。

    当一个单元格从顶部滚动时,&#34; new&#34;出现在底部的新单元并不是新的,它是旧单元传回数据源以便为新行重新配置。为实现此目的,您的数据源不会像@JonRose正确指出的那样分配新的单元格,而是使用dequeueReusableCellWithIdentifier向表格视图询问重用的单元格。