如何使用按钮返回第一个视图

时间:2012-10-26 09:03:17

标签: objective-c ios xcode

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

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

如果有人能提供帮助那就太棒了!

    //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

6 个答案:

答案 0 :(得分:1)

使用UINavigationcontroller

[self.navigationController popViewControllerAnimated:YES];

答案 1 :(得分:0)

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

See the apple docs about view controllers

答案 2 :(得分:0)

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

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

然后在seconViewController上返回方法:

[self dismissModalViewControllerAnimated:YES];

你可以将ModalTransitionStyle改为苹果给你的几个:D

希望这有帮助

答案 3 :(得分:0)

请勿将第二个ViewController添加为subview的{​​{1}} 使用view使用UINavigationController将新UIViewController添加到视图堆栈 然后,您可以使用导航控制器后退按钮,或使用您自己的代码[self.navigationController pushViewController:payTableView animated:YES];

按钮

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

答案 4 :(得分:0)

您需要在此处使用委托:

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

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

in .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

答案 5 :(得分:0)

[payTableView.view removeFromSuperview];

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