【问题标题】:Multiple Segment is Selected in SegmentController in iOS7iOS 7 的 Segment Controller 中选择了多个 Segment
【发布时间】:2023-04-06 11:09:01
【问题描述】:

我在 CellForRowAtIndex 方法中添加了一个 SegementController 以及我们之前选择的它选择的 lasted 值。但是一旦我们移动到其他屏幕并返回当前屏幕,Segement 将选择 multiple 选项,如下所示:

这里已经选择了“是”,然后我选择了“否”,

这是我在 CellForRowAtIndexPath 中编写的代码:

   UISegmentedControl *seg = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Yes", @"No", @"Either", nil]];
   seg.frame = CGRectMake(190.0f, 10.0f, 205.0f, 30.0f);
   seg.selectedSegmentIndex = 0;
   [seg setTintColor:[UIColor orangeColor]];
   seg.segmentedControlStyle = UISegmentedControlStyleBar;
   [seg addTarget:self action:@selector(segSelected:) forControlEvents:UIControlEventValueChanged];
   seg.tag = indexPath.row;
   cell.textLabel.frame = CGRectMake(10, 5, 150, 30);
   [cell.contentView addSubview:seg];
   seg.selectedSegmentIndex = [[[arryaSegment objectAtIndex:indexPath.row]objectForKey:@"SelecteKey"] intValue];

【问题讨论】:

  • 我猜你没有正确地重用单元格。放入完整的 cellforrowatindex 块

标签: objective-c ios7 uisegmentedcontrol


【解决方案1】:

这可能不是关于同时选择2个段,而是同时添加两个segmentedControls,因为每次显示单元格时都会添加一个新控件。

确保每个单元格只调用一次添加 UISegmentedControl 的代码。

例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell; // = ... dequeue ...
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];

        // add segmented control only when creating a new cell
        UISegmentedControl *seg = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Yes", @"No", @"Either", nil]];
        seg.frame = CGRectMake(190.0f, 10.0f, 205.0f, 30.0f);
        seg.selectedSegmentIndex = 0;
        [seg setTintColor:[UIColor orangeColor]];
        seg.segmentedControlStyle = UISegmentedControlStyleBar;
        [seg addTarget:self action:@selector(segSelected:) forControlEvents:UIControlEventValueChanged];
        cell.textLabel.frame = CGRectMake(10, 5, 150, 30);
        [cell.contentView addSubview:seg];

        seg.tag = 42; // used to reference segmentedControl in dequeued cell. see next line
    }

    UISegmentedControl *seg = (UISegmentedControl *)[cell.contentView viewWithTag:42];
    seg.selectedSegmentIndex = [[[arryaSegment objectAtIndex:indexPath.row]objectForKey:@"SelecteKey"] intValue];

    return cell;
}

由于您不能再使用带有 segmentedControl 标记的 indexPath 的丑陋方式,您必须使用一种以不同方式获取 indexPath 的方法。像这样的:

- (IBAction)segSelected:(UISegmentedControl *)sender {
    CGPoint originOfSegmentedControlInTableView = [sender convertPoint:CGPointZero toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:originOfSegmentedControlInTableView];
    ...
}

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    相关资源
    最近更新 更多