从每个Viewcontroller打开viewController文件

时间:2015-08-06 10:42:37

标签: objective-c iphone ios7 e-commerce

我正在开发与Flipkart非常相似的电子商务应用程序。

现在我无需登录即可访问我的应用程序。我的意思是最初我可以跳过登录。但是当我要购买任何项目时,应该提示用户登录。

现在客户的要求是应用程序的每个页面都应该有登录按钮,因此,用户应该从每个页面导航到登录页面,并且在成功登录后,他应该从他/她去的时候返回到特定页面登录页面。

任何想法如何实现这种功能?

3 个答案:

答案 0 :(得分:1)

  

第1步:创建基类

<强> BaseViewController.h

#import <UIKit/UIKit.h>

@interface BaseViewController : UIViewController
-(void)takeMeToLogin;
@end

<强> BaseViewController.m

#import "BaseViewController.h"

@interface BaseViewController () {
    UIView *myTabBar;

    UIButton *loginButton;
}

@end

@implementation BaseViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    loginButton = [UIButton buttonWithType:UIButtonTypeCustom];
    loginButton.tag = 5566778897;
    [loginButton addTarget:self action:@selector(takeMeToLogin) forControlEvents:UIControlEventTouchUpInside];
    [loginButton setBackgroundImage:[UIImage imageNamed:@"login.png"] forState:UIControlStateNormal];
    loginButton.frame = CGRectMake(x,y, width, height);
    [self.view addSubview:backButton];
}

-(void) takeMeToLogin {
    // code here to go to Login screen
}
  

第2步:使用BaseViewController作为基类。

现在,无论何时创建任何课程,您都将拥有以下内容。

@interface YourViewController : BaseViewController

默认情况下,您将拥有@interface YourViewController : UIViewController

如果您还需要其他任何内容,请与我们联系

编辑1

关于您的评论, Fahim的解决方案也在运行,但它有一个限制,我必须在导航栏上创建登录按钮。我无法在屏幕上的任何位置放置登录按钮。 我会说,您可以将其添加到任何您想要的地方 以下是如何。

YourViewController.m以下。

UIButton *buttonThatYouWantToMove = (UIButton *)[self.view viewWithTag:5566778897];
[self.view addSubview:buttonThatYouWantToMove]; // if this don't work use insertSubview:aboveSubview:
buttonThatYouWantToMove.frame = CGRectMake(x,y,width,height); // this is very important

完成!!!

如果您需要进一步解释,请与我们联系。

答案 1 :(得分:0)

我创建MYBaseViewController并在所有其他控制器中继承它。我创建了一个函数,它向导航栏右侧项添加了登录按钮和一个处理登录的功能。通过这种方式,您可以将所有内容保存在一个位置。

您可以在UIViewController类别中执行相同操作,并在适当的控制器中调用方法,但我个人认为,如果每个UIViewController的解决方案都不那么漂亮。

如果有人有更好的想法,我很乐意听到它。

答案 2 :(得分:0)

Fahim的解决方案也有效,但它有一个限制,我必须在导航栏上创建登录按钮。我无法在屏幕上的任何位置放置登录按钮。

我接触的方式不同。

  1. 我创建了loginViewController。
  2. 在loginViewController文件中创建协议。
  3. 在每个viewcontroller中放置按钮以打开loginviewcontroller文件
  4. 模态打开loginview控制器
  5. 最重要的是在我的Stroryboard文件中,我将loginviewcontroller文件嵌入到NavigationController中,并且我的NavigationController与每个ViewController模态附加。

    enter image description here

    在LoginViewController.h中

    @class LoginViewController;
    @protocol LoginViewControllerDelegate <NSObject>
    
    - (void)LoginViewControllerViewDidCancel:(LoginViewController *)controller;
    - (void)LoginViewControllerViewDidDone:(LoginViewController *)controller;
    
    @end
    
    @interface LoginViewController : UIViewController
    @property (nonatomic, weak)id <LoginViewControllerDelegate> delegate;
    
    @end
    

    在LoginViewController.m中

    - (IBAction)didCancel:(UIBarButtonItem *)sender {
        [self.delegate LoginViewControllerViewDidCancel:self];
    }
    - (IBAction)didDone:(id)sender {
        [self.delegate LoginViewControllerViewDidDone:self];
    }
    

    现在FirstViewController,SecondViewController等的代码相同。

    <强> FirstViewController.m

    #import "LoginViewController.h"
    @interface FirstViewController ()<LoginViewControllerDelegate>
    
    #pragma mark - Navigation
    
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        if ([segue.identifier isEqualToString:@"LoginView"]) {
            UINavigationController *navigationController = segue.destinationViewController;
            LoginViewController *loginViewController = [navigationController viewControllers][0];
            loginViewController.delegate = self;
        }
        if ([segue.identifier isEqualToString:@"Thirdpage"]) {
    
        }
    }
    
    #pragma loginViewController delegate
    -(void) LoginViewControllerViewDidCancel:(LoginViewController *)controller{
    
        //Your Logic
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    
    -(void) LoginViewControllerViewDidDone:(LoginViewController *)controller{
        //Your Logic
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    

    它对我来说就像一个魅力..