0

我在 xcode 中使用单视图应用程序模板。我创建了第一个视图控制器,然后用新的 .m 和 .h 以及 xib 添加了另一个。

我可以单击一个按钮 IBAction,然后进入我的第二个视图,但是我用于“返回”按钮的代码不会让我回到我的第一个视图,一切都崩溃了。我已经包含了似乎遵循我正在使用的教程的代码。此外,我只是控制单击了我的按钮并将该行拖到 .h 中的 IBAction 以挂接 secondViewController 按钮,这是我在第一个视图控制器上所做的,它似乎在那里工作。

如果有人可以提供帮助,那就太好了!

    //from my first view controller .h which works
-(IBAction) buttonPressedPayTable: (id) sender; 

//from my first view controller.m which also works and gets me to the second view
-(IBAction) buttonPressedPayTable: (id) sender
{
SecondViewController *payTableView = [[SecondViewController alloc]
initWithNibName:@"SecondViewController" bundle:nil];
    [self.view addSubview:payTableView.view];
}


//from my second view controller .h that will not get me back to the first view without crashing

#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController
{

}
-(IBAction) back: (id)sender;

@end

//from my second view controller .m which doesn't seem to work
#import "SecondViewController.h"


@implementation SecondViewController

-(IBAction) back: (id)sender

{
    [self.view removeFromSuperview];
}




@end
4

6 回答 6

1

使用 UINavigation 控制器

[self.navigationController popViewControllerAnimated:YES];
于 2012-10-26T09:06:44.423 回答
0

您可以使用导航方法从一个视图控制器切换到另一个。

查看有关视图控制器的苹果文档

于 2012-10-26T09:17:07.560 回答
0

使用模态视图可能会更好。所以代替 addSubView 使用:

[payTableView setModalPresentationStyle:UIModalPresentationFullScreen];
[payTableView setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentModalViewController:payTableView animated:YES];

然后在 seconViewController 的 back 方法上:

[self dismissModalViewControllerAnimated:YES];

您可以将 ModalTransitionStyle 更改为苹果为您提供的少数几个:D

希望这可以帮助

于 2012-10-26T09:19:43.533 回答
0

不要将您的第二个添加ViewController为. 使用 a将新的添加到视图堆栈, 然后您可以使用导航控制器的后退按钮,或者使用您自己的按钮和代码subviewview
UINavigationControllerUIViewController[self.navigationController pushViewController:payTableView animated:YES];[self.navigationController popViewControllerAnimated:YES];

或者,您可以使用 Storyboards 并使用简单的 segue。

于 2012-10-26T09:22:10.780 回答
0

您需要在这里使用委托:

在第一个视图的 .h 中声明一个成员变量:

@interface FirstViewControllerClassName: UIViewController
    {
    SecondViewController *payTableView;
    }
    @property (nonatomic, retain) SecondViewController *payTableView;

在 .m 中:

@synthesize payTableView;

-(IBAction) buttonPressedPayTable: (id) sender
{
if (!payTableView)
     payTableView = [[SecondViewController alloc]
initWithNibName:@"SecondViewController" bundle:nil];
payTableView.delegate = self;
payTableView.isFinishedSelector = @selector(removeView);
    [self.view addSubview:payTableView.view];
}

- (void)removeView
{
   [payTableView.view removeFromSuperview];
   [payTableView release];
   payTableView = nil;
}


//Just declare a member variable delegate in secondviewcontroller like:

#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController
{
   id delegate;
   SEL isFinishedSelector;
}

@property (nonatomic, assign) id delegate;
@property (nonatomic, assign) SEL isFinishedSelector;


-(IBAction) back: (id)sender;

@end

#import "SecondViewController.h"


@implementation SecondViewController
@synthesize delegate;
@synthesize isFinishedSelector;

-(IBAction) back: (id)sender

{
         if ([self.delegate respondsToSelector:isFinishedSelector])
                [self.delegate performSelector:isFinishedSelector];
}




@end
于 2012-10-26T09:45:29.970 回答
0

[payTableView.view removeFromSuperview];

我认为您正在删除整个视图。这就是应用程序崩溃的原因

于 2012-10-26T09:48:04.483 回答