您好我以编程方式创建按钮并将我的按钮连接到另一个视图,但我遇到了segue问题 我应该使用prepareForSegue方法进行故事板,但我不知道有什么样的网站样本,但是当我使用那个样本时我会收到错误,请你帮帮我
提前致谢!
这是我的代码
创建按钮
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor=[UIColor colorWithRed: 201.0/255.0 green: 201.0/255.0 blue:201.0/255.0 alpha: 1.0];
button.tag = currentTag;
currentTag++;
[button.layer setBorderColor: [[UIColor blackColor] CGColor]];
[button.layer setBorderWidth: 1.0];
[button setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal];
button.frame = CGRectMake(80*x, 32*y, 80, 32);
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[buttonView addSubview: button];
按钮操作
-(void)buttonPressed:(UIButton *)button
{
NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame));
WeekView *crtObj=[[WeekView alloc]initWithNibName:@"WeekView" bundle:nil];
[self.navigationController pushViewController:crtObj animated:YES];
[crtObj release];
}
准备segue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"WeekView"]) {
// Get reference to the destination view controller
WeekView *vc = [segue destinationViewController];
// Pass any objects to the view controller here, like...
[vc setMyObjectHere:object]; //// I don't know what should I write instead of object
}}
错误
编辑2:****我收到警告:
直接从视图控制器启动的Segues必须具有可用于的标识符 - [UIViewController performSegueWithIdentifier:sender:]
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"WeekView"]) {
// Get reference to the destination view controller
// WeekView *vc = [segue destinationViewController];
// Pass any objects to the view controller here, like...
// [vc setMyObjectHere:object];
[segue.destinationViewController setTitle:@"WeekView"];
}}
答案 0 :(得分:11)
实际上有两种方法可以将视图控制器推送到导航控制器上。
旧的方式,所有代码。这就是你做的。你现在可以完全忘记segues。
新方法:在Storyboard中建立一个Segue(将segue从一个视图控制器推送到一个新的视图控制器,你也在Storyboard中定义),给它一个Identifier
名称然后使用这个代码推送视图控制器。
[self performSegueWithIdentifier:myIdentifyer sender:self];
其中self是视图控制器。现在,您可以在prepareForSegue:
中进行自定义。
答案 1 :(得分:4)
本例中的示例代码只是告诉您prepareForSegue:sender:
中可以执行的操作类型。
它建议您尝试segue的viewController将有一个方法setMyObjectHere:
,它会期望您传递该对象。
例如,您的类可能有setTitle:
方法,并且在prepareForSegue:sender:
代码中,您可以根据您执行segue的控制器中的信息预先设置标题。< / p>
要消除警告,您需要一个标识符,如下图所示:
答案 2 :(得分:0)
“旧的编码方式”,没有更好的编码方式,希望这会有所帮助,但如果你以编程方式使用UIButtons和UIViews,你甚至不应该使用segues。
在app delegate中创建一个根视图控件,而不仅仅是弹出和关闭下一个viewcontrollers等。
例如,这是您在viewcontrollers中所需要的全部内容:
-(void)nextControllerButton:(UIButton*)button{
SearchViewController *nextController = [[SearchViewController alloc] init];
nextController.username = _username.text;
nextController.password = _password.text;
[self.navigationController showViewController:nextController sender:self];
}