【问题标题】:Open/close UITextField's inputView programmatically on UITableView reload在 UITableView 重新加载时以编程方式打开/关闭 UITextField 的 inputView
【发布时间】:2018-07-31 09:52:34
【问题描述】:

我有一个UITextField,它是UITableViewCell 的一部分,该表应该是一个哑组件。

UITextField 触发的事件由自定义委托处理,该委托:

  1. 每次值更改(键入、旋转选择器等)都会触发一系列事件来存储和处理数据
  2. 在链的末端UITableView 完全重新加载。
  3. 完全重新加载会导致inputView 消失。

虽然我想要 1. 和 2.,但我不想要 3. inputView 应该保持打开状态并专注于正在编辑的 UITextField -> 我正在寻找一种方法来打开/关闭 以编程方式,也许将其放在-(void)prepareForReuseUITableViewCell

我最通用的自定义UITableViewCell初始化:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.inputField = [UITextField new];
        [self.inputField addTarget:self
                  action:@selector(textFieldDidChange:)
        forControlEvents:UIControlEventEditingChanged];

        [self.contentView addSubview:self.inputField];

        [self.inputField setTranslatesAutoresizingMaskIntoConstraints:NO];
        [self.inputField.leftAnchor constraintEqualToAnchor:self.contentView.leftAnchor].active = YES;
        [self.inputField.rightAnchor constraintEqualToAnchor:self.contentView.rightAnchor].active = YES;
        [self.inputField.topAnchor constraintEqualToAnchor:self.contentView.topAnchor].active = YES;
        [self.inputField.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor].active = YES;
    }
    return self;
}

更改处理示例(inputView 可以是标准键盘、UIPickerView 或自定义):

-(void) textFieldDidChange:(UITextField *)textField {
    NSString *valueString = textField.text;

    [self.delegate handleValueChange:valueString forAttributeID:self.attributeID];
}

【问题讨论】:

    标签: ios uitableview delegates uitextfield uicontrol


    【解决方案1】:

    我认为问题在于,一旦您调用reloadData,将为所有可见部分/行创建新单元格,因此原始输入视图失去其第一响应者状态。

    有很多方法可以规避这一点。也许最简单的方法是不调用reloadData,而只是重新加载“更改”的单元格(´reloadRowsAtIndexPaths:withRowAnimation:`)——尤其是不要使用导致更改的 inputView 重新加载单元格

    或者,您可以存储“活动”IndexPath,并在刷新后让相应的 inputView 再次成为第一响应者。

    可能还有其他解决方案需要考虑 - 所有这些都取决于您的工作流程。

    【讨论】:

    • 解决方案没问题,但我仍然面临每次更改UITextField.text 时键盘不断向上滑动并且表格不断向下滚动的问题。
    猜你喜欢
    • 2017-07-22
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多