2

我已经为此苦苦挣扎了很长一段时间,并且在这里和其他地方进行了大量研究,试图找出最好的前进方式。

我有一个带有四个选项卡的选项卡栏应用程序 - 其中三个选项卡接收用户输入和计算值。其中一些值被转发到其他视图(因为它们在相关计算中再次使用)。这不是我的问题 - 我能够在视图之间向前和向后发送数据,但我遇到的困难实际上是“清除”所有视图中的所有值以响应 UILongPress 手势识别器。我在计算结果的每个视图上都有一个“计算”按钮,以及一个用于清除显示视图上的值的“清除”按钮。

这是应用程序的第 2 版,我想通过允许用户在任何视图上按住清除按钮并清除所有值来扩展其功能。

似乎不太难,但它肯定对我来说。

我已经研究过使用全局变量、单例、NSUserDefaults、NSNotification——所有这些都没有运气。我还没有尝试过键值观察 (KVO),但我认为我的很多问题都源于我使用非常旧的代码这一事实——我的 AppDelegate.m 文件具有较旧的“DidFinishLaunching”方法而不是较新的方法“ApplicationDidFinishLaunchingWithOptions”另外,选项卡栏和视图控制器都是在 Interface Builder 中创建的,而不是像在较新的 XCode 选项卡栏模板中那样以编程方式创建。

我怀疑我的问题可能在于我对 viewWillAppear 和/或 viewDidLoad 的使用——我在每个 viewcontroller.m 文件中都使用了 viewWillAppear,而且效果很好。在这个的核心,我应该能够以某种方式设置一个全局 BOOL(“清除所有按下?”是或否),当视图出现时,查看该变量,如果是,设置相应的 uitextfield.text 属性为零——如果为否,则继续正常初始化并显示。)

我也尝试了 awakeFromNib,但没有运气。

在我发布任何代码之前,有人知道我可以尝试什么吗?感谢您提供的任何帮助!

4

3 回答 3

3

遍历 tabbarcontroller 中的所有视图控制器,然后遍历每个视图控制器视图的子视图,如果视图是文本字段,请将其清除。

- (void)clearAll
{
    for (UIViewController *vc in self.tabBarController.viewControllers) {
        for (UIView *view in vc.view.subviews) {
            if ([view isKindOfClass:[UITextField class]]) {
                UITextField *textField = (UITextField *)view;
                textField.text = nil;
            }
        }
    }
}
于 2013-09-05T01:48:12.510 回答
2

swift 3的更新:

for view: UIView in self.view.subviews {
                if (view is UITextField) {
                    let textField: UITextField? = (view as? UITextField)
                    textField?.text = nil
                }
            }

更新:斯威夫特 4

extension UIViewController{
    public func clearAllTexts(){
        for view in self.view.subviews{
            if view is UITextField{
                let field: UITextField = view as! UITextField
                field.text = ""
            }
        }
    }
}

来电: self.clearAllTexts()

于 2017-09-11T10:03:05.580 回答
0

试试这个简单的解决方案。

for (UIView *view in [self.view subviews]) {
    if ([view isKindOfClass:[UITextField class]]) {
        UITextField *textField = (UITextField *)view;
        textField.text = @"";
    }
}
于 2015-06-18T11:49:04.280 回答