iphone - 当文本字段有输入时启用 UIBarButtonItem

标签 iphone uitextfield uibarbuttonitem

每当“userInput”UITextField 中没有输入时,我尝试禁用我的发送按钮(工具栏中的 UIBarButtonItem),并在有输入时启用它。这是我写的代码 - 我不太明白为什么它不起作用。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

if (userInput.text.length >0) {
    [sendButton setEnabled:YES];
}else{
    [sendButton setEnabled:NO];
}

}

我还收到一条警告,提示“控制到达非 void 函数的末尾。”

我对 xcode 和编程非常陌生,所以我不确定这告诉我什么。

感谢您的帮助!!

最佳答案

文本字段对象向其委托(delegate)发送消息shouldChangeCharactersInRange,询问是否允许更改(添加新字符或删除字符)。由于您不想拒绝对文本字段本身所做的任何更改,因此必须从此方法返回 YES。警告

control reaches end of non-void function

意味着你有一个非 void 函数,所以你应该返回一些东西。由于没有返回任何内容,因此弹出此消息。

需要记住的一件重要事情是,在进行更改之前调用此委托(delegate)方法,这是有道理的,因为正在请求委托(delegate)允许或禁止更改。如果委托(delegate)人拒绝,则无论用户输入什么内容,文本字段的值都将保持不变。

因此调用 userInput.text 是没有用的,因为它会返回旧值,因为尚未进行更改。但是,此方法的参数中有足够的信息来构造文本字段的新值。

NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string]);

完整的方法如下所示,

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
    BOOL isFieldEmpty = [newText isEqualToString:@""];
    sendButton.enabled = !isFieldEmpty;
    return YES;
}

关于iphone - 当文本字段有输入时启用 UIBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5255881/

相关文章:

iphone - 使用 iOS SDK 将 UITableView 显示为下拉列表

xcode - 我们如何在导航栏中的UIBarButtonItem中放置两行

iphone - 如何将运行 iOS 5 的 iPhone 静音

ios - 在 iPhone 应用程序中实现应用程序瘦身

ios - TableViewCell 中的 UITextField 没有出现

ios - 使用 Core Text 重新实现 UITextView 和 UITextField

swift - 将信息从字典推送到 UITextField (Swift)

objective-c - BarButtonItem 因未知原因调整大小

swift - 如何在 Swift 中对 UIBarButtonItem 应用垂直对齐

iphone - Objective-c iPhone 百分比编码一个字符串?