我正在创建一个工具栏应用程序,在该应用程序中所有工具栏图标和操作都已成功完成。但是当我使用该图标进行下一个视图调用时,我正在调用后退按钮然后它将崩溃。我在哪里添加我的代码
/////在视图中加载
objectLabel = [[UILabel alloc]init];
objectLabel.frame = CGRectMake(10, 10, 300, 40);
objectLabel.text = @"Press Button";
[self.view addSubview:objectLabel];
NSLog(@"label");
objectToolbar=[UIToolbar new];
objectToolbar.barStyle = UIBarStyleBlackTranslucent;
[objectToolbar sizeToFit];
objectToolbar.frame = CGRectMake(0, 410, 320, 50);
NSLog(@"toolbar");
UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(pressButton1:)];
UIBarButtonItem *systemItem2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction
target:self
action:@selector(pressButton2:)];
UIBarButtonItem *systemItem3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera
target:self
action:@selector(pressButton3:)];
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];
NSArray *items = [NSArray arrayWithObjects: systemItem1, flexItem, systemItem2, flexItem, systemItem3, nil];
[objectToolbar setItems:items animated:NO];
[self.view addSubview:objectToolbar];
///之后
-(void) pressButton1:(id)sender{
// objectLabel.text = @"Add";
FirstViewController *objectFirstViewController=[[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
[self.view addSubview:objectFirstViewController.view];
}
-(void) pressButton2:(id)sender{
objectLabel.text = @"Take Action";
}
-(void) pressButton3:(id)sender{
objectLabel.text = @"Camera";
}
///在FirstViewController.m中
-(IBAction)back:(id)sender
{
ViewController *objectViewController=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
[self.view addSubview:objectViewController.view];
}
当我点击后退按钮时它会崩溃..请给我解决方案
答案 0 :(得分:2)
为了返回,您不应该创建上一个类的新对象并再次添加它。相反,您需要从superview中删除当前子视图以返回。
-(IBAction)back:(id)sender
{
[self.view removeFromSuperview];
}
最好为此使用导航或模型转换,而不是只执行addSubView
。
答案 1 :(得分:2)
只需从当前视图的superview中删除ex ..
[self.view removeFromSuperview];
// or if you want to call the method from your MainViewController use this line [objectFirstViewController removeFromSuperview];
答案 2 :(得分:0)
由于您正在执行[self.view addSubview:Viewcontroller.view];
,因此逻辑上遵循您应该在添加的子视图中执行[self.view removeFromSuperview];
。尽管如此,建议您使用导航控制器并执行推/弹操作以显示/删除视图。如果您的问题是导航栏,则可以通过self.navigationController.navigationBarHidden = YES;
隐藏它,并使用工具栏作为替代。
答案 3 :(得分:0)
而不是这个;
[self.view addSubview:objectFirstViewController.view];
使用
[self.navigationController pushViewController:objectFirstViewController animated:YES];
和Viewdidload的FirstviewController设置,
self.navigationController.navigationBar.hidden = YES;
并使用此
-(IBAction)back:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
多数民众赞成。