![](/img/trans.png)
[英]UITextField in UITableView with InputView of DatePicker
[英]Open/close UITextField's inputView programmatically on UITableView reload
我有一個UITextField
,它是UITableViewCell
一部分,表應該是一個啞組件。
UITextField
觸發的事件由自定義委托處理,該委托:
UITableView
已完全重新加載。 inputView
消失。 當我想要1.和2.時,我不需要3. inputView
應該保持打開狀態,並專注於正在編輯的UITextField
>我正在尋找一種以編程方式打開/關閉它並可能將其放置在-(void)prepareForReuse
的UITableViewCell
我最通用的自定義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];
}
我認為問題在於,一旦調用reloadData
,就會為所有可見的部分/行創建新的單元格,因此原始輸入視圖將失去其第一個響應者狀態。
您可以通過多種方法來規避這一點。 也許最簡單的方法是不調用reloadData
,而是重新加載“已更改”的單元格(´reloadRowsAtIndexPaths:withRowAnimation:`)-特別是不要使用導致更改的inputView重新加載單元格
或者,您可以存儲“活動的” IndexPath,並在刷新后讓適當的inputView再次成為第一響應者。
可能還需要考慮其他解決方案-所有這些都取決於您的工作流程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.