我有一个包含自定义tableView单元格的UITableView。此自定义UITableViewCell包含两个UITextField。我已经为每个textField分配了一个标记值,我想要做的是确定两个UITextField是否都包含文本。我想这样做是因为用户在UITextFields中输入值,这样一旦用户在UITextField A中输入了文本,并且在UITextField B中输入了一个字符,反之亦然(即用户在UITextField B中输入了文本,并且在UITextField B)中输入单个字符,触发事件或操作。我意识到我需要使用UITextFieldDelegate方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {}
然而,我的问题是我不确定如何在使用此方法时引用BOTH UITextFields。我在这个方法中似乎无法弄清楚如何获得对活动自定义UITableViewCell的引用。有没有人有任何建议?
答案 0 :(得分:1)
你走上UITextField的超级视图,直到找到UITableViewCell。然后,您向tableview询问该单元格的索引。
答案 1 :(得分:1)
这就是我要做的:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
UITextField *theOtherTextField = nil;
// Get a list of sibling views of the textField
for( UIView *sub in textField.superview.subviews ){
if( textField!=sub && [sub isKindOfClass:[UITextField class]] ){
theOtherTextField = (UITextField *)sub;
}
}
// Now you have 'textField' and 'theOtherTextField' ready to use
}
顺便说一句,这是你获取对单元格的引用的方式,但这取决于UITableViewCell
视图层次结构中文本字段的深度:
UITableViewCell *cell = (UITableViewCell *)textField.superview.superview;
您可能将UITableView
设为UITextFieldDelegate
。如果您想要将UITableViewCell
更改为UITextFieldDelegate
,则可以避免上述大部分问题。
答案 2 :(得分:0)
在自定义单元格中,您有两个属性textField1和textField2引用单元格中的两个文本字段。当委托textField:shouldChangeCharactersInRange:invoked时,你将检查使用上面两个属性:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (self.textField1.text.length > 0 && self.textField2.length > 0) {
// do what you want
}
}
您还可以检测到与该文本字段对应的属性:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField == self.textField1) {
// text field 1's text changed
}
else if (textField == self.textField2) {
// and this is text field 2
}
}
答案 3 :(得分:0)
不要使用shouldChangeCharactersInRange
!我经常看到它并不是那种方法。该方法用于停止无效输入,例如在数字字段中输入字母。
而是继承UITableViewCell
并创建自定义单元格。给它几个IBActions并让UITextFields
连接到EditingChanged
事件的那些操作。从那里跟踪它们中的值。如果你想看看这些值,你也可以给这个班级一些IBOutlets。
答案 4 :(得分:0)
在自定义单元格中,由于您已经标记了它们,因此您可以借助这些标记访问TextField。 创建textField的两个私有实例,然后在initWithStyle中,使用textFields Tag分配它们。
_textField1 = [self viewWithTag:tag1];
_textField2 = [self viewWithTag:tag2];
_textField1.delegate = self;
_textField2.delegate = self;
现在在textField Delegate方法中,您可以检查两个textField的文本长度。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if(_textField1.text.length > 0 && _textField2.text.length > 0){
// write the action you want to do here
}
}