【问题标题】:iOS can't select segment in UISegmentedControliOS 无法在 UISegmentedControl 中选择段
【发布时间】:2012-12-21 18:18:12
【问题描述】:

我在 UITableView 的 headerview 中有一个 UISegmentedControl。由于某种原因,我无法选择任何段,每当我这样做时,它都会自动选择数组中的最后一个段,而我无法选择其他任何段。当我删除动作时,我可以选择哪个。不知道发生了什么。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    if (section == 1) {

        UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0, 320, 40)]; // x,y,width,height

        NSArray *itemArray = [NSArray arrayWithObjects:@"E01", @"E02", @"E03", @"E05", @"E06", @"T05", @"E17", @"E19", nil];
        control = [[UISegmentedControl alloc] initWithItems:itemArray];
        [control setFrame:CGRectMake(30.0, 0, (tableView.bounds.size.width) - 60, 40)];
        [control setSelected:YES];
        [control setSegmentedControlStyle:UISegmentedControlStylePlain];
        [control addTarget:self action:@selector(unitSegmentControl:) forControlEvents:UIControlEventValueChanged];

        [headerView addSubview:control];

        return headerView;
    }

    return nil;
}

【问题讨论】:

  • 你在说什么?我没有对那种性质说什么?
  • 哦,对不起。我想把它写到另一个问题。
  • @JonErickson,在 viewDidLoad 左右创建 control = [[UISegmentedControl alloc] initWithItems:itemArray]; 并再次检查。同时将[control addTarget:self action:@selector(unitSegmentControl:) forControlEvents:UIControlEventValueChanged]; 移动到viewDidLoad。

标签: ios arrays header tableview uisegmentedcontrol


【解决方案1】:

我不知道在 UISegmentedControl 上调用 setSelected 有什么作用,但我建议您使用:

control.selectedSegmentIndex = anNSInteger;

设置初始选定的段。不过我怀疑这是你的问题。

如果您有滚动表视图,需要考虑的其他事项,

viewForHeaderInSection

每次标题滚动到屏幕上时都会调用该部分,这意味着每次标题滚动到屏幕上时您的分段控件都会重新初始化,并且您将丢失您选择的索引。

除此之外,也许您可​​以发布 unitSegmentControl 选择器的代码。可能它导致表视图重新加载并且您的 viewForHeaderInSection 被再次调用,从而重新初始化您的分段控制器。

【讨论】:

  • 它不是一个可滚动的表格,但我相信它与GVUserDefaults有关。我正在为每个选定的索引设置一个属性,我认为它导致它重新初始化。所以,我只是回到 NSUserDefaults 并使用它。
  • 是的,任何导致表视图重新加载的事情都会导致再次调用 viewForHeaderInSection 并重置分段控制器。将分段控制器保存在其他地方并在 viewForHeaderInSection 方法中将其添加到您的标题视图中而不是在那里创建它可能是一个好主意,具体取决于您的应用程序的工作方式。
  • 嗯,老实说,它并没有被重新加载,因为一旦你触摸了这个段,它会自动选择一个你没有选择的,它会一直保持选中状态,你无法取消选择它或选择另一个,比如它冻结了或其他什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多