【问题标题】:iphone - change view with button programmaticallyiphone - 以编程方式使用按钮更改视图
【发布时间】:2012-11-19 02:34:29
【问题描述】:

我读过这个tutorial 关于iphone dev 上的故事板。这家伙通过一个按钮改变视图。但是按钮的连接是通过界面生成器进行的。如何以编程方式执行此操作,以便在更改视图之前进行一些检查(例如用户名/密码)? 提前致谢。

【问题讨论】:

    标签: iphone objective-c cocoa-touch uiviewcontroller


    【解决方案1】:

    将一个视图与另一个视图连接起来(而不是按钮与视图)。 将 segue 更改为 custom 并给它一个标识符(在 IB 中)。例如:登录

    然后创建一个动作并将其分配给按钮。

    在按钮动作中使用:

    [self performSegueWithIdentifier:@"Login" sender:self];
    

    创建一个 Segue 类对象并在 .m 中使用类似的东西:

    UIViewController *dst = [self destinationViewController];
    UIViewController *nav = [self sourceViewController];
    
    //All your custom code
    
    [nav presentModalViewController:dst animated:YES];
    

    编辑:忘记了重要的事情!

    在 IB 中,在 Segue 配置中,放入 Segue Class,即创建的 Segue 类的名称。例如:LoginSegue 是创建的 segue 的名称,在 Segue 类中你必须写“LoginSegue”

    编辑:创建类:

    1.- 创建一个扩展 UIStoryBoardSegue 的新文件,.h 将类似于:

    #import <Foundation/Foundation.h>
    
    @interface LoginSegue : UIStoryboardSegue
    
    @end
    

    2.- 在实现中,在名为 perform 的方法中使用上面的代码:

    -(void)perform
    {
    
    UIViewController *dst = [self destinationViewController];
    UIViewController *nav = [self sourceViewController];
    
     //Custom Code
    
     [nav presentModalViewController:dst animated:YES];
    
    }
    

    如果需要访问源viewController的属性,需要修改:

    UIViewController *nav = [self sourceViewController];
    

    eYourClass *nav = [self sourceViewController];
    

    希望对您有所帮助!

    【讨论】:

    • 你能解释一下“创建一个 Segue 类”是什么意思吗?
    • 一个扩展 UIStoryBoardSegue 的类。将编辑答案以添加它
    • 我看到我必须覆盖 perform 方法。任何线索我应该怎么做? (顺便说一句,我使用导航控制器 - 我不想使用模式)
    • 调用方法推送而不是呈现形式导航。
    • 伙计,你刚刚救了我的皮肤。非常感谢xD
    【解决方案2】:

    您可以在界面生成器中创建按钮并将 touchUpInside 操作拖动到 IBAction

    或在viewDidLoad某处的代码中

      [self.login addTarget:self action:@selector(loginTapped) forControlEvents:UIControlEventTouchUpInside];
    

    那么loginTapped 方法可能看起来像

    - (void)loginTapped;
    {
      if ([self authenticateWithUsername:self.username.text password:self.password.text]) {
        [self performSegueWithIdentifier:@"loginSuccessful" sender:self];
      } else {
        // Warn user about invalid username/password
      }
    }
    

    这取决于您在情节提要中创建了名称与identifier 参数匹配的segue

    【讨论】:

      猜你喜欢
      • 2015-10-03
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      相关资源
      最近更新 更多