【问题标题】:How Can I Change Tableview Array with Segment Control如何使用段控制更改 Tableview 数组
【发布时间】:2015-01-20 16:45:45
【问题描述】:

我有一个表视图,我有两个数组。我的数组命名为 AllItems 和 SpecialItems。我使用段控制。我想如果段值是 0 tableview 加载 AllItems 数组,当更改段值和值 = 1 比 mytableview 重新加载 tada 但 SpecialItems 数组。你能帮帮我吗?谢谢。

【问题讨论】:

  • 显示您尝试过的内容...否则他们可能会投票结束您的问题。

标签: ios objective-c arrays uitableview uisegmentedcontrol


【解决方案1】:

我用表格标签解决了这个问题。

- (IBAction)segmentControlChanged:(UISegmentedControl *)sender {

if (sender.selectedSegmentIndex == 1) {
    mytable.tag = 1;
}
else 
{
    mytable.tag = 0;
}

[mytable reloadData];
}




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

   if(tableView.tag==1)
{

    return [specialItems count];
}

else

return [allItems count];


}

【讨论】:

    【解决方案2】:

    您可以创建两个实现所有UITableViewDataSource 方法的数据源类:一个用于AllItems,一个用于SpecialItems。要在两者之间切换,请连接 valueChanged 操作。在被调用的方法中,设置数据源并重新加载表格视图。

    - (void)valueChange:(UISegmentedControl *)sender
    {
        if (/* condition for all items */) {
            self.tableView.dataSource = self.allItemsDataSource;
        } else {
            self.tableView.dataSource = self.specialItemsDataSource;
        }
        [self.tableView reloadData];
    }
    

    【讨论】:

      【解决方案3】:

      我会亲自创建一个从中加载数据的数组。把它放在你的实现中:

      NSArray * _tableData
      

      然后在您的 viewDidLoad 中将其分配给我们希望它开始的数组。

      _tableData = [[NSArray alloc] initWithArray:allItems];
      

      这最初会加载我们将始终看到的数据,因为段控件从索引 0 开始。我们必须在某处设置初始数据,以便 tableView 加载其中的一些数据。

      然后设置行数和cellForRowAtIndex从_tableData数组中提取

      - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
          return _tableData.count;
      }
      
      - (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
      
          UITableViewCell * cell = [tableView_ dequeueReusableCellWithIdentifier:bCell];
      
          // Here we use the specific array as we would normally
      
          return cell;
      }
      

      这一步意味着 tableView 将与数组一起加载。即使数组为空,视图仍会加载,因为单元格的数量为零。

      现在在我们的值更改函数中,我们可以根据需要重置数组:

      - (IBAction)segmentControlChanged:(UISegmentedControl *)sender {
      
          if (sender.selectedSegmentIndex == 1) {
              _tableData = allItems;
          }
          else {
              _tableData = specialItems;
          }
      
          [self.tableView reloadData];
      }
      

      您只需要确保更改的段控件已链接到 XIB 文件中(或以编程方式),并在选择数组后重新加载表。

      这种事情其实很容易做到。如果您遇到问题,我绝对会建议您逐步完成。在应用下一个步骤之前确保每个步骤都有效:

      1. 分别使用两组数据获取 tableView 加载
      2. 确认点击时段控件正在调用更改函数

      那么就应该这样做

      【讨论】:

        猜你喜欢
        • 2013-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-14
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多