在textfield输入时启用UIBarButtonItem

时间:2011-03-10 05:33:02

标签: 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];
}

}

我也收到警告,说“控制到达无效功能的终点。”

我对xcode和编程很新,所以我不确定是什么告诉我的。

感谢您的帮助!!

4 个答案:

答案 0 :(得分:3)

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

control reaches end of non-void function

表示你有一个非空函数,所以你应该返回一些东西。由于没有返回任何内容,此消息会弹出。

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

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

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;
}

答案 1 :(得分:0)

确定你需要在vieWillAppear中设置启用NO

-(void)viewWillAppear:(BOOL)animated
{
  [self.sendButton setEnabled:NO];

}

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

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

将UIBarButton作为属性和IBOUtlet并进行正确连接

·H

UIBarButton *sendButton;

@property(nonatomic,retain) IBOutlet UIBarButton *sendButton;

和.m

@synthesize sendButton;

-(void)dealloc
{
  [self.sendButton release];
  [super dealloc];
}

并且还记得从IB建立textField的连接。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在您的控制器中为UITextViewUIBarButtonItem添加(弱)出口,并将它们连接到视图中的项目。

将另一个IBAction添加到控制器,例如:

- (void)textChanged:(id)sender
{
     if ( [self.someTextField.text length] > 0 )
         [self.someBarButtonItem setEnabled:YES];
     else [self.someBarButtonItem setEnabled:NO];
}

UITextView的{​​{1}}个事件与您刚刚创建的Edit Changed联系起来。 在textChanged:中输入字符时,Edit Changed甚至会启动,您可以检查文本的长度,并在文本字段包含某些文本时启用/禁用UITextField

您还可以UIBarButtonItem检查初始文本长度,并根据文本启用/禁用该按钮。

希望有所帮助。 它适用于iOS 6.1。