确保用户在UIBarButton在UINavigationBar中可选之前填充了UIViewController中的两个UITextFields
我有一个简单的UIViewController
,其中包含一些UITextField
。顶部的导航栏有一个UIBarButtonItem
(在Storyboard中创建),它被称为保存最终允许用户保存他们正在输入的条目,因此关闭此UIViewController
。确保用户在UIBarButton在UINavigationBar中可选之前填充了UIViewController中的两个UITextFields
我想强制用户必须至少输入2或3个文本字段才能保存按钮变为可选,所以它在那里,但灰色直到用户填写两个指定的文本字段。
我将如何实现这样的目标?
对于这个小问题,我很抱歉,但实际上并没有比这更多的东西;灰色的BarButtonItem
直到字段已被填充,然后允许用户点击它。我在网上搜索,非常意外地找不到这方面的很多信息。
任何指导将非常感激。
更新。我曾尝试加入:
self.navigationItem.rightBarButtonItem.enabled = NO;
到viewDidLoad
和viewWillAppear
只是为了看看我是否能启动禁用我的栏按钮项目,它不会禁用的。
创建的所有东西故事板。
首先,您需要IBAction
和IBOutlet
为您的UIBarButton
。你可以这样做,在您的m
@interface ViewController()
@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem;
@end
和:
- (IBAction)myBarButtonItemAction:(id)sender
{
// your code
}
我会假设你有的Xcode Interface Builder的创建2 UITextField
,然后将其添加为IBOutlet
你。L:
@property (strong, nonatomic) IBOutlet UITextField *myTextFieldOne;
@property (strong, nonatomic) IBOutlet UITextField *myTextFieldTwo;
此行添加到viewDidLoad
禁用UIBarButton
:
self.myBarButtonItem.enabled = FALSE;
为了把你UITextField
你可以做两种方式控制:
首先与UITextFieldDelegate
一个,将此代码添加到.m
@interface ViewController() <UITextFieldDelegate>
您可以检查UITextFieldDelegate Protocol Reference here。
而你需要委托方法是这两个中的一个,这取决于你想要什么来实现的:
– textFieldDidBeginEditing:
– textFieldDidEndEditing:
但是我不喜欢这种方法,因为textFieldDidBeginEditing:
有人可以开始编辑并永远不会输入文字。随着textFieldDidEndEditing:
你需要打电话来解雇键盘:[self.myTextFieldOne resignFirstResponder]
。您也可以/应该执行另一个UITextFieldDelegate
谁采取的控制权的“返回”键– textFieldShouldReturn:
如果你决定使用UITextFieldDelegate
记得补充:
self.myTextFieldOne.delegate = self;
self.myTextFieldTwo.delegate = self;
然后,我的第二个选项是增加该行代码viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkTextFields) name:UITextFieldTextDidChangeNotification object:nil];
在这里,您收到一个通知,您的SEL
每次文字是茶nged成UITextField
则:
- (void) checkTextFields
{
// Add here your logic to check TextFields and decide if they have text
if ([self.myTextFieldOne.text length] != 0 && [self.myTextFieldTwo.text length] != 0)
{
self.myBarButtonItem.enabled = TRUE;
}
else
{
self.myBarButtonItem.enabled = FALSE;
}
}
亲爱的加百列 - 非常感谢你的出色答案。我沿着通知中心的路线走了,因为你对第一种方法是正确的,有人正在点击文本字段,而不是输入任何内容,也是实现我的第一个NSNotificationCenter代码的机会,也是学习它的好机会。它的作用像一个绝对的魅力,我不能够感谢你。我非常感谢你对此的出色帮助。如果可以的话,我会给你两次投票!再次感谢! – amitsbajaj
很高兴。 –
可以通过所述方法之一
- 在viewDidLoad中()方法禁用的UITextField检查为条件的UIBarbutton
- 委托方法达到相同的。 您可以通过声明一个变量并随后递增计数 UITextFielddelegate'textFieldShouldReturn'方法来实现此目的。
- 条件满足后,启用保存UIBarButton。
希望这会有所帮助。
感谢您的回复。这非常有帮助。一个简单的问题 - 我如何设置UIBarButton项目在viewDidLoad中被禁用?它是在Storyboard中创建的,并且有一个IBAction附加到按钮而不是IBOutlet。 – amitsbajaj
另外,我应该检查哪个UITextField的委托方法? – amitsbajaj
对不起,我刚刚更新了我试过的问题 – amitsbajaj
我希望我的回答可以帮助你。 –
它认真地做了 - 非常感谢Garbiel! – amitsbajaj