我有一个根视图控制器,它包含我的登录视图控制器的插座。根视图应控制到下一个视图的流程,但我的登录视图有按钮继续。如何在我的根控制器中将按钮的内部设置为IBAction?
我有一个方法是保留一个指向我创建登录类的根类的指针(新代码被注释掉):
// RootViewController.m
- (void)viewDidLoad {
LoginViewController *loginController =
[[LoginViewController alloc]initWithNibName:@"LoginView" bundle:nil];
self.loginViewController = loginController;
//loginViewController.parent = self;
[self.view insertSubview:loginController.view atIndex:0];
[loginController release];
[super viewDidLoad];
}
- (IBAction)loginPressed: (id)sender
{
self.loginViewController.loginButton.enabled = NO; //yea... doesnt work
}
所以在IB中我向Nib添加了一个UIViewController,并将其作为一个插座,然后将按钮的内部事件分配给loginPressed,这是在根控制器(父节点)中定义的...这样做不是很明确引用RootViewController中self.loginViewController的控件。
是否有正确的方法来执行此操作。
-frustrated c ++ / c#/ java coder
答案 0 :(得分:1)
您是否考虑过以模态方式展示loginView?然后你可以弹出视图并返回rootViewController并从那里继续前进。
答案 1 :(得分:0)
在与该XIB相同的类中创建按钮按下的方法出口并将其连接起来。我假设你的登录视图是由根控制器创建的......在登录视图上为根视图创建一个assign属性,然后在创建登录视图时将根控制器分配给它。然后,在登录视图的“按下按钮”方法中,您可以引用根视图控制器。拼写出来:
在LoginController的.h文件中:
@property (nonatomic, assign) RootViewController* rvc;
在LoginController的.m文件中:
@synthesize rvc;
在Root View Controller的“制作登录控制器代码”中,在您初始化之后但在呈现之前:
[loginController setRvc:self];
在您的LoginController的按钮触摸方法中:
[[self rvc] whateverMethodThatDoesLoginStuff];
这样,您就可以在用户按下按钮和“登录”代码之间找到路径。
答案 2 :(得分:0)
您可以将loginViewController作为IBOutlet,将其操作'touch up inside'连接到-loginPressed:文件所有者。
或者您可以自己以编程方式在-viewDidLoad中分配和初始化控制器,并以编程方式设置操作。
但你所做的似乎混合了两种方式。