UITextField shouldBeginEditing 每隔一段时间调用一次?
Posted
技术标签:
【中文标题】UITextField shouldBeginEditing 每隔一段时间调用一次?【英文标题】:UITextField shouldBeginEditing called every other time? 【发布时间】:2014-01-12 00:48:55 【问题描述】:不幸的是,ios 没有像 html 那样带有标签的下拉选择器。我决定我最终要为我的应用程序创建一个,它看起来和工作都很棒。我的下拉对象是 UITextField 的子类。然而,我改变了一些东西,现在它只在某些时候有效。
用户交互已启用,但我不希望文本字段可编辑。我的下拉子类所在的类是 UITextField 委托,并且应该接收 UITextField 的委托方法。
我有- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
,在那里我检查有问题的文本字段是否是下拉菜单,如果是,我调用一个方法来实例化弹出窗口并禁用编辑,但下拉菜单仅出现在其他每个点击上。
例如,我将点击“文本字段”并显示我的弹出框。我点击了弹出框,然后点击“文本字段”,没有任何反应。我再次点击文本字段并出现弹出框。不知道为什么会这样,这就是我正在做的事情:
.h
subclass : UIViewController<UITextFieldDelegate>
.m
dropdownTextField.delegate = self;
...
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
if(textField == self.measurementSelect)
NSLog(@"IM CALLED");
[self showPopover:textField];
return NO;
return YES;
-(void)showPopover:(id)sender
if (_measurementPicker == nil)
_measurementPicker = [[iPadMeasurementSelect alloc] initWithStyle:UITableViewStylePlain];
_measurementPicker.delegate = self;
if (_measurementPopover == nil)
_measurementPopover = [[UIPopoverController alloc] initWithContentViewController:_measurementPicker];
[_measurementPopover presentPopoverFromRect:self.measurementSelect.frame inView:self.conversionView permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
else
[_measurementPopover dismissPopoverAnimated:YES];
_measurementPopover = nil;
每次点击都会被 nslogged,所以我认为我的 popover 方法是这个问题的罪魁祸首。有什么想法吗?
【问题讨论】:
【参考方案1】:让我们通过梳理 UI 元素的存在和弹出框的可见状态来重写:
// canonical lazy getters for UI elements
- (iPadMeasurementSelect *)measurementPicker
if (!_measurementPicker)
_measurementPicker = [[iPadMeasurementSelect alloc] initWithStyle:UITableViewStylePlain];
_measurementPicker.delegate = self;
return _measurementPicker;
- (UIPopoverController *)measurementPopover
if (!_measurementPopover)
_measurementPopover = [[UIPopoverController alloc] initWithContentViewController:self.measurementPicker];
return _measurementPopover;
// now the show/hide method makes sense. it can take a bool about whether to show or hide
-(void)showPopover:(BOOL)show
if (show)
[self.measurementPopover presentPopoverFromRect:self.measurementSelect.frame inView:self.conversionView permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
else
[self.measurementPopover dismissPopoverAnimated:NO];
// if you want/need to create a new one each time it is shown, nil the popover here, like this:
// self.measurementPopover = nil;
当 textField 开始编辑时,显示如下弹出框:
[self showPopover:YES];
当代理收到 didEndEditing 消息时:
[self showPopover:NO];
【讨论】:
像魅力一样工作!伟大的洞察力!以上是关于UITextField shouldBeginEditing 每隔一段时间调用一次?的主要内容,如果未能解决你的问题,请参考以下文章
在 UITextField 操作中将 UITextField 字符串转换为 Double
如何调整 UITextField 占位符文本以适合 UITextField 宽度?
如果添加了新的 UITextField,如何向下移动许多 UITextField