我试图在“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和编程很新,所以我不确定是什么告诉我的。
感谢您的帮助!!
答案 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)
在您的控制器中为UITextView
和UIBarButtonItem
添加(弱)出口,并将它们连接到视图中的项目。
将另一个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。