【问题标题】:Selecting Multiple Elements In A UIPickerView在 UIPickerView 中选择多个元素
【发布时间】:2023-03-11 00:38:02
【问题描述】:

我在网上找到了这段代码,很惊讶它基本上与我想要的相反。以下是方法...

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UITableViewCell *cell = (UITableViewCell *)view;

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
        [cell setBackgroundColor:[UIColor clearColor]];
        [cell setBounds: CGRectMake(0, 0, cell.frame.size.width -20 , 44)];
        cell.tag = row;
        UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(toggleSelection:)];
        singleTapGestureRecognizer.numberOfTapsRequired = 1;
        [cell addGestureRecognizer:singleTapGestureRecognizer];
    }

    if ([selectedItems indexOfObject:[NSNumber numberWithInt:row]] != NSNotFound) {
        [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
    } else {
        [cell setAccessoryType:UITableViewCellAccessoryNone];
    }
    cell.textLabel.text = @"Joe";

    return cell;
}

- (void)toggleSelection:(UITapGestureRecognizer *)recognizer {
    NSNumber *row = [NSNumber numberWithInt:recognizer.view.tag];
    NSUInteger index = [selectedItems indexOfObject:row];
    if (index != NSNotFound) {
        [selectedItems removeObjectAtIndex:index];
        [(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryNone];
    } else {
        [selectedItems addObject:row];
        [(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryCheckmark];
    }
}

结果是每个 UIPickerView 项目的简单复选标记。这很好,但默认情况下 PickerView 的所有元素都被选中,这意味着它们显示一个复选标记(我不希望它们被选中,除了我在我的代码中专门选择的元素)。您能否编辑我的方法并尝试弄清楚我正在做的事情。

另外,我如何才能看到用户在我的代码中选择的元素。救命!

【问题讨论】:

  • 如果这段代码写得很好,能否给我示例代码来实现。我也有同样的需求

标签: iphone objective-c xcode cocoa-touch uipickerview


【解决方案1】:

从这个块来看,有一个名为selectedItems的数组被存储,它包含与行对应的NSNumber对象。

if ([selectedItems indexOfObject:[NSNumber numberWithInt:row]] != NSNotFound) {
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
} else {
    [cell setAccessoryType:UITableViewCellAccessoryNone];
}

如果选中 rowstarts,selectedItems 必须初始化为每行包含一个 NSNumber 对象。尝试将其初始化为空。要读取所选内容,请遍历其内容编号。

【讨论】:

    【解决方案2】:

    也许这会有所帮助:

    在选择或取消选择时使用 UITableView 并切换单元格配件类型。

    cell.accessoryType = UITableViewCellAccessoryCheckmark
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2017-11-29
      • 2016-06-03
      • 2023-01-25
      • 1970-01-01
      相关资源
      最近更新 更多