我正在开发与Flipkart非常相似的电子商务应用程序。
现在我无需登录即可访问我的应用程序。我的意思是最初我可以跳过登录。但是当我要购买任何项目时,应该提示用户登录。
现在客户的要求是应用程序的每个页面都应该有登录按钮,因此,用户应该从每个页面导航到登录页面,并且在成功登录后,他应该从他/她去的时候返回到特定页面登录页面。
任何想法如何实现这种功能?
答案 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
如果您还需要其他任何内容,请与我们联系
关于您的评论, 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的解决方案也有效,但它有一个限制,我必须在导航栏上创建登录按钮。我无法在屏幕上的任何位置放置登录按钮。
我接触的方式不同。
最重要的是在我的Stroryboard文件中,我将loginviewcontroller文件嵌入到NavigationController中,并且我的NavigationController与每个ViewController模态附加。
在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];
}
它对我来说就像一个魅力..