试图查看 UITableViewRowCell 内的两个 UITextFields 是不是包含 iOS 中的文本
Posted
技术标签:
【中文标题】试图查看 UITableViewRowCell 内的两个 UITextFields 是不是包含 iOS 中的文本【英文标题】:Trying to see if both UITextFields inside of UITableViewRowCell contain text in iOS试图查看 UITableViewRowCell 内的两个 UITextFields 是否包含 iOS 中的文本 【发布时间】:2015-10-25 01:14:07 【问题描述】:我有一个包含自定义 tableView 单元格的 UITableView。这个自定义 UITableViewCell 包含两个 UITextFields。我已经为每个文本字段分配了一个标记值,我想做的是确定两个 UITextField 是否都包含文本。当用户在 UITextFields 中输入值时,我想这样做,这样一旦用户在 UITextField A 中输入了文本,并在 UITextField B 中输入了一个字符,反之亦然(即用户在 UITextField B 中输入了文本,并且在 UITextField B) 中输入单个字符,则触发事件或操作。我意识到我需要使用 UITextFieldDelegate 方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
但是,我的问题是我不确定在使用此方法时如何引用 BOTH UITextFields。在我使用这种方法时,我似乎无法弄清楚如何获取对活动自定义 UITableViewCell 的引用。有人有什么建议吗?
【问题讨论】:
【参考方案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】:你沿着 UITextField 的 superviews 走,直到你找到一个 UITableViewCell。然后向 tableview 询问该单元格的索引。
【讨论】:
【参考方案3】:在自定义单元格中,您有两个属性 textField1 和 textField2 对单元格中的两个文本字段的引用。当委托 textField:shouldChangeCharactersInRange: 调用时,您将检查使用上述两个属性:
- (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
【讨论】:
我没有这些文本字段的 IB 出口,因为它们包含在自定义 UITableViewCell 类中,这就是我不能使用这种方法的原因。 @syedfa 您将 IBOutlets 放入自定义 UITableViewCell。 如果您使用 IB,您可以将 IB Outlet 从 IB 拖到您的代码中自定义 UITableViewCell 类。如果不使用 IB,则声明文本字段属性并分配它【参考方案4】:不要使用shouldChangeCharactersInRange
!我经常看到这种情况,但这不是那种方法的用途。该方法用于停止无效输入,例如在数字字段中输入字母。
改为子类UITableViewCell
并制作您的自定义单元格。给它几个 IBActions 并让它的 UITextFields
通过 EditingChanged
事件连接到这些操作。从那里跟踪其中的值。如果您想查看这些值,您还可以为班级提供几个 IBOutlets。
【讨论】:
【参考方案5】:在您的自定义单元格中,由于您已经标记了它们,因此您可以借助这些标记访问 TextField。 创建两个 textFields 的私有实例,然后在 initWithStyle 中,为它们分配你的 textFields 标签。
_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
【讨论】:
以上是关于试图查看 UITableViewRowCell 内的两个 UITextFields 是不是包含 iOS 中的文本的主要内容,如果未能解决你的问题,请参考以下文章
windows server 2003 iis配置 出现 http 403 禁止访问,怎么办,网页内显示“你无权查看该网页”