Viewcontroller 失败,所以调用另一个 Viewcontroller - Objective-c

Posted

技术标签:

【中文标题】Viewcontroller 失败,所以调用另一个 Viewcontroller - Objective-c【英文标题】:Viewcontroller fails so call another Viewcontroller - Objective-c 【发布时间】:2013-09-26 14:54:04 【问题描述】:

我有两个 ViewController,一个名为 ViewController,另一个名为 Signup,

这是我用来调用 Signup.xib 文件的代码,

- (IBAction)signupButton:(id)sender 
Signup *myView = [[Signup alloc] initWithNibName:@"Signup" bundle:nil];
[self.view addSubview:myView.view];
  

此代码有效。它启动了 Signup Viewcontroller,但是当我尝试从 Signup.m 调用 ViewController.xib 文件时它不起作用。

这是我从 Signup.m 文件中调用 ViewController.xib 文件的方式,

- (IBAction)loginView:(id)sender 
    ViewController *dashboardView = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    [self.view addSubview:dashboardView.view];

我已经在 Signup.m 文件中导入了 ViewController.h 文件。 loginView 按钮有效,因为我在按钮中放置了一个 NSLog() 以查看它是否有效并且确实有效。但是当我单击 loginView 按钮时,我得到了某种类型的错误。我不知道 xcode 中有什么错误,但它是这样的,

0x110309b:  movl   8(%edx), %edi <- Thread 1: EXc_BAD_ACCESS (code=1, address=0x60000008)

它以绿色突出显示,我不知道它是什么意思。

【问题讨论】:

如果您只是想在按下注册按钮时从 LoginView 移动到 Signup 视图,然后从 Signup 视图返回到 LoginView 。我建议您首先创建您的 LoginView 并使用“SignUp”按钮。因此,当用户单击注册“推送”登录视图控制器顶部的新 SignupView 控制器时。并在您的注册视图上有一个“登录视图”按钮。当用户单击该按钮时,尝试“关闭当前视图控制器”。所以用户将再次显示登录视图。您可以将其用作解决方法。 【参考方案1】:

正如用户 Priyatham51 所说,数字 3 是您收到错误的原因。如果您不使用 UINavigationController 推送/弹出视图,则另一种方法是将 Signup 视图控制器呈现为模态视图。然后当你想返回时,你可以在 Signup 控制器内部调用。

[self dismissModalViewControllerAnimated:YES];

但是您需要将您的注册按钮更改为。

- (IBAction)signupButton:(id)sender 
    Signup *myView = [[Signup alloc] initWithNibName:@"Signup" bundle:nil];
    [myView setModalPresentationStyle:UIModalPresentationFormSheet]; //you can change the way it is presented
    [myView setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; //you can change the animation
    [self presentModalViewController:myView animated:YES]; //show the modal view
  

希望对你有帮助。

【讨论】:

感谢这项工作,但 Signup.xib 不是 loginView 的子项,对吗?它是自己的父母? 没错。如果您想返回链接,请考虑使用委托。 您的代码需要更新日期。我相信您应该使用[self dismissViewControllerAnimated:YES completion:nil];[self presentViewController:viewController animated:YES completion:nil];,因为您使用的那些已被弃用。不过目前还不是什么大问题。【参考方案2】:

试试这个向用户展示注册视图:

    - (IBAction)signupButton:(id)sender 
         Signup *myView = [[Signup alloc] initWithNibName:@"Signup" bundle:nil];
         [self presentModalViewController:myView  animated:YES];
      

然后通过关闭注册视图控制器返回登录视图

    - (IBAction)loginView:(id)sender 
         [self dismissModalViewControllerAnimated:YES];
     

【讨论】:

您的代码需要更新日期。我相信您应该使用[self dismissViewControllerAnimated:YES completion:nil];[self presentViewController:viewController animated:YES completion:nil];,因为您使用的那些已被弃用。不过目前还不是什么大问题。【参考方案3】:

您通常不会将 View Controller 的视图添加到当前视图中,但如果这是您想要实现的,请先尝试清理项目。有时 XCode 在您添加/删除它们后无法正确加载 nib 文件。进入产品菜单->“清理”,然后按住“选项”键,进入产品菜单并按“清理构建文件夹”。

另外,添加“所有异常”断点。它将位于 XCode 的左侧面板上,在“断点”选项卡下。在该选项卡上,底部有“+”按钮。单击“添加异常断点”,然后按“完成”。这基本上将为您提供有关崩溃的更多信息。

我知道这并不能完全帮助解决您的问题,但会为您提供更多详细信息。

【讨论】:

【参考方案4】:

您的代码无法正常工作的主要原因是您试图再次将 ParentView 作为子视图添加到子视图中,而您不应该这样做。

您似乎正在尝试这样做。

    您创建了 LoginView 您创建了 SignupView 并将其作为子视图添加到 LoginView。所以 LoginView 是父级,而注册是子级。 (这是您的错误)。您正在尝试将 LoginView 添加为 SignupView 的子视图。这永远不会奏效。

试试这个

我建议您先创建 LoginView 并设置“SignUp”按钮。因此,当用户单击注册“推送”登录视图控制器顶部的新 SignupView 控制器时。并在您的注册视图上有一个“登录视图”按钮。当用户单击该按钮时,尝试“关闭当前视图控制器”。所以用户将再次显示登录视图。您可以将其用作解决方法。

请看一下这个例子

http://www.roseindia.net/tutorial/iphone/examples/pushView.html

这里还有一个工作示例

http://www.theappcodeblog.com/2011/08/15/iphone-development-tutorial-present-modal-view/

【讨论】:

这是假设他们在 UINavigation Controller 中工作。但会工作! @mashdup 我只是想向他们展示如何解决技术问题。我正在寻找关于模态视图演示的好教程。我认为这也会有所帮助。 我更喜欢这个想法,并遵循了第二个教程,但它不起作用。当我单击注册按钮以推送注册视图时,我收到一个错误并被发送到我的 main.m 文件。 您能否复制并粘贴您在提交按钮操作操作方法中的代码。

以上是关于Viewcontroller 失败,所以调用另一个 Viewcontroller - Objective-c的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 ViewController 调用一个 ViewController 的实例方法

需要从另一个viewController调用其他viewController中的方法

从另一个 .swift 文件调用 ViewController 函数

快速从另一个 ViewController 调用函数

UIWebView 在从另一个 ViewController 调用的方法中为 null

如何快速从另一个控制器调用函数