【问题标题】:Take data from a static label and use it to populate tableView从静态标签中获取数据并使用它来填充 tableView
【发布时间】:2013-06-17 18:51:06
【问题描述】:

我正在开发一个具有多个视图的应用程序,从一个视图获取数据并将其存储在另一个视图的表中。当一个计算按钮和一个按钮希望将这些标签中的数据存储在另一个单元格中的 UITable 中它们自己的单元格上时,我有用数据更新的标签。我目前不知道如何设置我的 UITable 以创建一个新单元格并将数据传递到每次按下验证按钮时该单元格。

【问题讨论】:

  • 没有UITable,只有UITableview
  • 这就是我的意思。在单独的视图控制器上有一个 [UITableView]。
  • UITableviewDatasource 方法和一个数据填充数组,将值添加到数据源数组然后[table reloadData];

标签: iphone ios objective-c uitableview


【解决方案1】:

这是基本的 MVC 行为。表格单元格在 UITableView 数据源委托方法中显示时加载。数据应该从某种类型的存储中加载,在您的情况下很可能是一个数组。

当您想(从任何地方)更新数据时,只需更新数据存储(数组)即可。

使用reloadData 方法(或在视图出现时)随意重新加载 UITableView。

【讨论】:

  • 那么创建多个单元格,每个单元格都包含自己的个人信息,我应该创建一个类,然后将每个类对象添加到数组中,这样每个单元格基本上都包含一个对象吗?
  • @NarimonKardani,这将是一个很好的方法。 NSDictionary 对象数组(名称/值对)也很容易使用。该数组需要有一个强引用并且可以从两个视图控制器中使用。您可以通过prepareForSegue 将数组从一个控制器传递到下一个控制器,或者该数组可以位于两个视图控制器之外的类中。
【解决方案2】:

所以你想在按下按钮时将 UILabel 的文本值存储在 UITableViewCells 中?

如果是这种情况,我会在每次单击按钮后将每个文本值作为一个元素存储在 NSArray 中,如下所示:

// Given:
// 1.) Your labels are IBOutlets
// 2.) Your labels follow the naming convention label1, label2, label3, etc
// 3.) You have an initialized class variable NSMutableArray *labels
// 4.) NUM_OF_LABELS_IN_VIEW is the number of UILabels in your view
// 5.) myTableView is an outlet to your UITableView, and its delegate and datasource are set to your view controller

-(IBAction)buttonPressed:(id)sender{
    self.labels = [[NSMutableArray alloc] init];
    for (int i=0; i < NUM_OF_LABELS_IN_VIEW; i++){
         [labels addObject:[self valueForKey:[NSString stringWithFormat:@"label%i", i]].text ];
    }

    [self.myTableView reloadData];
}

您的数据源方法应该如下所示:

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.labels count];
}


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

    static NSString *cellIdentifier = @"MyCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(!cell) {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier];
    }
    cell.textLabel.text = self.labels[indexPath.row];
    return cell;
}

如果 UITableView 位于单独的视图控制器中,只需将 NSArray *labels 分配给呈现视图控制器上的 @property。

【讨论】:

  • 我正在尝试设置它,但它只是没有它。我可以发布 xcode 项目以便您看一下吗?
  • 好的,上传到文件共享网站我去看看。
  • 嘿,这只是 xcode 项目,需要查看所有文件,例如视图控制器和东西
  • 应该都在文件夹里吧?
猜你喜欢
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多