Obj-c - 如果 textView 为空,则禁用 uibutton?
Posted
技术标签:
【中文标题】Obj-c - 如果 textView 为空,则禁用 uibutton?【英文标题】:Obj-c - Disable uibutton if textView is empty? 【发布时间】:2018-01-28 04:11:42 【问题描述】:如果 UITextView 使用以下代码为空,我正在尝试禁用我的 uibutton。如果该字段为空,则该按钮将禁用,但是,当我使用以下内容时,如果文本视图中有值,该按钮似乎不会“启用”?知道这是为什么吗?
编辑/更新:我在下面更新了我的代码(问题解决了一半)。在这种情况下,如果文本视图为空,我的发送按钮将被禁用。但是,一旦我的视图中有文本并按下发送,如果我再次点击发送(文本视图再次为空),发送按钮将不再被禁用。为什么是这样?
- (void)viewDidLoad
[super viewDidLoad];
self.sendButton.userInteractionEnabled = NO;
- (void)textViewDidChange:(UITextView *)textView
self.sendButton.userInteractionEnabled = (textView.text.length > 0);
【问题讨论】:
因为您将代码放在 viewDidLoad 中,该代码仅在加载控制器时执行一次。您应该检查 UITextField 委托并了解如何使用它。 @Surely 最初,我在 textViewDidBeginEditing 中有它,但仍然没有骰子? 为什么我的问题被否决了? 您的问题解决了一半意味着解决方案有效。第二次不起作用的原因是,如果您手动将 textview 的文本设置为空,则不会触发委托方法,您还需要手动禁用它。并且可能您想使用“setEnabled”方法而不是 userInteractionEnabled。 @Surely 你是个天才——完全正确。谢谢你!!有什么建议:我应该如何清除 textview? 【参考方案1】:你必须实现UITextView
委托:
- (void)textViewDidChange:(UITextView *)textView
sendButton.userInteractionEnabled = (textView.text.length > 0);
【讨论】:
超级奇怪 - 有了这个代码,当文本视图中没有文本时我可以点击按钮,但是当视图中有文本时它被禁用?大声笑 这个答案是用swift写的吗? obj-c 需要它。 没有骰子 - 如果 textview 为空,按钮仍然允许我点击它:/ 更正(有点):当我第一次点击文本视图时,它是空的,我的按钮被禁用。当我在视图中放置文本时,发送按钮现在已启用。但是,如果我之后立即再次点击发送并且我的文本字段再次为空,它允许我点击发送 - 从视图中清除初始文本后如何再次禁用该按钮? 如果你的textview默认为空,你应该设置sendButton.userInteractionEnabled = FALSE
;在你的viewDidLoad
。【参考方案2】:
您必须在执行 viewDidLoad 后在 self.replyField 中设置文本。
每当您更改 self.replyField 中的值时,请尝试执行以下代码:
if (self.replyField.text.length > 0)
sendButton.userInteractionEnabled = YES;
else
sendButton.userInteractionEnabled = NO;
您可以使用 isEnabled 代替 userInteractionEnabled
【讨论】:
奇怪的是,当我使用它时,当文本在字段中时发送按钮被禁用......并且当它不是时启用? 如果使用上面的字段中没有文本,则启用该按钮。【参考方案3】:你应该实现下面的委托方法来根据文本值启用和禁用按钮
optional func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool
【讨论】:
以上是关于Obj-c - 如果 textView 为空,则禁用 uibutton?的主要内容,如果未能解决你的问题,请参考以下文章
如果 MutableList 为空,如何更改 TextView 的可见性? (安卓/科特林)
在swift或obj-c中的uitextview末尾添加一个视图
textViewDidChangeSelection 方法认为 textView.text 为空
如何修改 heightForRowAtIndexPath 使其调整到其中的 textview 的高度,同时在 textview 为空时保持最小高度?