【问题标题】:Executing code/triggering UI Elements between two viewcontrollers在两个视图控制器之间执行代码/触发 UI 元素
【发布时间】:2014-10-06 01:48:15
【问题描述】:

我是 Objective C 和 MVC、协议等设计模式的新手,但就是这样:

我正在尝试在两个视图控制器中编写一个 iOS 应用程序:第一个有一个用户可以写入的文本视图,第二个有一个 UISwitch 触发“值更改”并保存文件。

如果我手动切换 SecondViewController 上的开关,它将保存文件,没关系。

但我希望文件可以在用户键入特定单词时从 FirstView 保存,它会自动切换到第二个视图,并自动激活 UIswitch 和它后面的所有方法。

我仍然无法让这两个接口以这种方式工作。提前感谢大家的帮助。干杯!


这是在情节提要的 SecondViewController.h 中连接的

-(IBAction)toggleFileSave:(id)sender;

并且照常实现...

@interface SecondViewController ()
@property (nonatomic,weak) IBOutlet UISwitch *mySaveFileSwitch;
@end

- (void) toggleFileSave:(id)sender {
    // how do I execute this code when the user 
    // type a specific word in the first view?? 
}

【问题讨论】:

    标签: ios objective-c model-view-controller uitextfield


    【解决方案1】:

    在您的 SecondViewController 中创建一个 BOOL 标志。 在输入特定单词时设置它并推送视图控制器。 在 SecondViewController 的 viewDidLoad 中检查标志条件。如果已设置,则调用所需的方法。

    当输入特定单词时:

       ViewController2 *viewController = [ViewController2 alloc]init];
       viewController2.flag = YES;
       [self.navigationController pushViewController:viewController2 animated:YES];
    

    【讨论】:

    • 我猜 alloc 消息中缺少一个“[”,但它不会推送视图:没有错误,只是停留在当前视图中。
    【解决方案2】:

    在您的文本字段委托中(如果不存在则添加一个)添加此方法:

    - (void)textFieldDidEndEditing:(UITextField *)textField {
        /* at this point the user finished editing */
        NSString *currentText = /* read text field value */
        if ([currentText isEqualToString:/* the magic word */]) {
             /* save the file, present a view controller, etc. */
        }
    }
    

    查看UITextFieldDelegate 以了解可用的方法,您可能需要多个方法才能获得所需的行为。

    如果您想加载第二个视图控制器以显示 UI 并保存文件,您可以按照 サンディープ 在他或她的回答中所说的那样:

    SecondViewController *controller = [SecondViewController new]; /* init as usual */
    controller.saveOnLoad = YES;
    

    [self.navigationController pushViewController:controller animated:YES];

    然后,在SecondViewController:

    - (void)viewDidLoad {
        if (self.saveOnLoad) {
            /* save file in async block */
            /* set switch on */
        }
    }
    

    如果您不需要显示第二个视图,我会将保存功能移至其自己的类并从第一个控制器中使用它,例如仅显示一条确认消息。

    【讨论】:

    • 这是完全正确的,但关键是我仍然卡在从 within if 块(应该是从 FirstView)调用 SecondViewController 中的 toggleFileSave(void) 方法。至少这是我认为应该做的,恕我直言。
    • 更新了答案。友情提示:在您的问题中包含实际问题。
    猜你喜欢
    • 2019-12-06
    • 2013-06-19
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多