我有一个简单的 UIViewController
,其中包含一些 UITextField
。顶部的导航栏有一个名为 Save 的 UIBarButtonItem
(在 Storyboard 中创建),它最终允许用户保存他们正在输入的条目并因此关闭这个 UIViewController
。
我想强制要求用户必须至少输入 2 或 3 个文本字段才能使“保存”按钮变为可选,所以它就在那里,但在用户填写两个指定的文本字段之前呈灰色。
我怎样才能实现这样的目标?
对于这个小问题,我很抱歉,但实际上没有比这更重要的了;将 BarButtonItem
变灰,直到字段已填写,然后允许用户单击它。我在网上搜索过,但令人惊讶的是找不到太多关于这方面的信息。
任何指导将不胜感激。
更新。我尝试添加:
self.navigationItem.rightBarButtonItem.enabled = NO;
到 viewDidLoad
和 viewWillAppear
只是为了看看我是否可以开始禁用我的栏按钮项目,它根本不会被禁用。
最佳答案
使用 Storyboard创建的所有内容。
首先,您的UIBarButton
需要IBAction
和IBOutlet
。你可以在你的 .m 中做到这一点
@interface ViewController ()
@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem;
@end
和:
- (IBAction)myBarButtonItemAction:(id)sender
{
// your code
}
我假设您使用 Xcode Interface Builder 创建了 2 个 UITextField
,然后将它们作为 IBOutlet
添加到您的 .m:
@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 .
而您需要的委托(delegate)方法是这两者之一,具体取决于您要实现的目标:
– 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];
每次文本更改为 UITextField
时,您都会收到 SEL
的通知
然后:
- (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;
}
}
关于ios - 在 UINavigationBar 中的 UIBarButton 是 Selectable 之前,确保用户在 UIViewController 中填写了两个 UITextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22809468/