如何更改不同分段控制索引的数据源

Posted

技术标签:

【中文标题】如何更改不同分段控制索引的数据源【英文标题】:How to change datasource for different segmented control index 【发布时间】:2016-03-03 12:37:22 【问题描述】:

我正在使用带有标题、电话和电子邮件的分段控件。我正在从地址簿中获取联系人详细信息并将它们存储为字典数组。每个字典都有键“名称”、“电子邮件”、“图像”、“电话”。我的要求是在点击电子邮件时仅在表格视图中显示带有电子邮件的联系人,并在点击分段控制上的电话按钮时显示带有电话的联系人。请帮助我实现这一目标。

【问题讨论】:

您将所有字典存储在单个数组中。同时显示你的段控动作,很容易解决 【参考方案1】:

我们可以通过多种方式实现。这里我使用Tag 概念,例如

第一步

在您的ViewDidLoad 中,设置为您的tableview.tag=1;

第二步

- (IBAction)segBtnTapped:(id)sender 

  if(yourSegmentControl.selectedSegmentIndex==0)
    // email
    tableview.tag=1;
 
 else if(segControlForColor.selectedSegmentIndex==1)
   // phone
    tableview.tag=2;
 
else
    // titles
    tableview.tag=3;
 
 [yourtableView reloadData];

第三步

无需更改部分中的行数或任何内容,只需调用您的 CellForRowatIndexpathdidSelectrowatIndexpath,例如

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



UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

   if(tableview.tag == 1)
  
      //code for email  
      cell.textLabel.text =[[yourarrayName objectAtIndex:indexPath.row]objectForKey:@"email"];

  

  else if(tableview.tag == 2)
  
      //code for phone

cell.textLabel.text =[[yourarrayName objectAtIndex:indexPath.row]objectForKey:@"phone"];

  

  else if(tableview.tag == 3)
  
      //code for titles 
         cell.textLabel.text =[[yourarrayName objectAtIndex:indexPath.row]objectForKey:@"titles"];
  
  return cell;


 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

 if(tableview.tag == 1)
  
      //code for email  
        NSLog(@"email==%@",[[yourarrayName objectAtIndex:indexPath.row]objectForKey:@"email"]);

  

  else if(tableview.tag == 2)
  
      //code for phone

    NSLog(@"phone==%@",[[yourarrayName objectAtIndex:indexPath.row]objectForKey:@"phone"]);

  

  else if(tableview.tag == 3)
  

         NSLog(@"title==%@",[[yourarrayName objectAtIndex:indexPath.row]objectForKey:@"titles"]);
  


【讨论】:

不错。但是在上面的代码中,我可以直接在tableview中显示电话号码和电子邮件,但是我想显示一次带有电子邮件的联系人姓名,下次显示带有电话号码的联系人姓名。 我们可以修改任何我们需要的选择是你的 已解决...我用for in循环遍历数组 @Naveen -- 很高兴听到兄弟。如果我的答案有用,请给答案投票,它在将来很有用 嗨,我遇到了另一个问题。我想以 Invite(3/50) 格式获取我的导航控制器标题,3 是我选择的 tableview 行数,50 是常数。请帮忙【参考方案2】:

只需检查下面委托方法中的 segmentedControl 索引状态即可完成。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    if segmentedControl.selectedSegmentIndex == 0 
        // Load phone values from dictionary 
        ....
     
    else 
        // Load email values from dictionary
        ....
    

当分段控制索引改变时不要忘记重新加载表。

【讨论】:

我可以这样做,但我的字典中有键“姓名”、“电子邮件”、“电话”的值。在一种情况下,我想显示有电子邮件的联系人,接下来我需要显示有电话号码的联系人。我怎样才能将它们分开。 遍历字典数组并使用"phone"键的值作为selectedsegmentindex 0

以上是关于如何更改不同分段控制索引的数据源的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 的标头中使用分段控件更改 UICollectionView 的内容

禁止分段控制段改变

Swift 在尝试访问分段控制索引时抛出错误

ES索引设计

日期选择器 + 分段控制 + 一些标签

iPhone分段控制分接