【发布时间】:2012-11-19 02:34:29
【问题描述】:
我读过这个tutorial 关于iphone dev 上的故事板。这家伙通过一个按钮改变视图。但是按钮的连接是通过界面生成器进行的。如何以编程方式执行此操作,以便在更改视图之前进行一些检查(例如用户名/密码)? 提前致谢。
【问题讨论】:
标签: iphone objective-c cocoa-touch uiviewcontroller
我读过这个tutorial 关于iphone dev 上的故事板。这家伙通过一个按钮改变视图。但是按钮的连接是通过界面生成器进行的。如何以编程方式执行此操作,以便在更改视图之前进行一些检查(例如用户名/密码)? 提前致谢。
【问题讨论】:
标签: iphone objective-c cocoa-touch uiviewcontroller
将一个视图与另一个视图连接起来(而不是按钮与视图)。 将 segue 更改为 custom 并给它一个标识符(在 IB 中)。例如:登录
然后创建一个动作并将其分配给按钮。
在按钮动作中使用:
[self performSegueWithIdentifier:@"Login" sender:self];
创建一个 Segue 类对象并在 .m 中使用类似的东西:
UIViewController *dst = [self destinationViewController];
UIViewController *nav = [self sourceViewController];
//All your custom code
[nav presentModalViewController:dst animated:YES];
编辑:忘记了重要的事情!
在 IB 中,在 Segue 配置中,放入 Segue Class,即创建的 Segue 类的名称。例如:LoginSegue 是创建的 segue 的名称,在 Segue 类中你必须写“LoginSegue”
编辑:创建类:
1.- 创建一个扩展 UIStoryBoardSegue 的新文件,.h 将类似于:
#import <Foundation/Foundation.h>
@interface LoginSegue : UIStoryboardSegue
@end
2.- 在实现中,在名为 perform 的方法中使用上面的代码:
-(void)perform
{
UIViewController *dst = [self destinationViewController];
UIViewController *nav = [self sourceViewController];
//Custom Code
[nav presentModalViewController:dst animated:YES];
}
如果需要访问源viewController的属性,需要修改:
UIViewController *nav = [self sourceViewController];
到
eYourClass *nav = [self sourceViewController];
希望对您有所帮助!
【讨论】:
您可以在界面生成器中创建按钮并将 touchUpInside 操作拖动到 IBAction
或在viewDidLoad某处的代码中
[self.login addTarget:self action:@selector(loginTapped) forControlEvents:UIControlEventTouchUpInside];
那么loginTapped 方法可能看起来像
- (void)loginTapped;
{
if ([self authenticateWithUsername:self.username.text password:self.password.text]) {
[self performSegueWithIdentifier:@"loginSuccessful" sender:self];
} else {
// Warn user about invalid username/password
}
}
这取决于您在情节提要中创建了名称与identifier 参数匹配的segue
【讨论】: