我正在制作一个简单的应用程序来显示饮料细节,现在我正在尝试添加一个允许用户输入自己饮料的视图。我已经创建了一个显示细节的视图,现在我只是将视图传递给另一个控制器来制作添加饮料视图。问题是,当我尝试添加“取消”和“保存”按钮时,它不会出现,尽管代码符合而没有任何错误。我附上了代码作为参考。
这是在按下添加按钮时创建新视图的代码。 (我制作了一个有效的添加按钮,然后拉出导航栏)
- (IBAction)addButtonPressed:(id)sender {
AddDrinkViewController *addViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailSecond"];
UINavigationController *addNavController = [[UINavigationController alloc] initWithRootViewController:addViewController];
[self presentModalViewController:addNavController animated:YES];
NSLog(@"Add button pressed!");
这是addviewcontroller实现文件中的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save:)];
}
- (IBAction)save:(id)sender {
NSLog(@"Save Pressed");
[self dismissModalViewControllerAnimated:YES];
}
- (IBAction)cancel:(id)sender{
NSLog(@"Cancel Pressed");
[self dismissModalViewControllerAnimated:YES];
}
我已将addview中的标头导入到根控制器中,所以我不认为这是问题,你们中的任何人都会看到任何错误吗?
答案 0 :(得分:1)
只需更改行
即可[self presentModalViewController:addNavController animated:YES];
到
[self presentViewController:navigationController animated:YES completion:nil];
看到了魔力。我还测试了代码
答案 1 :(得分:0)
我的建议是在运行应用程序的XIB文件中的任何代码之前为视图创建模板。在分配全新视图后尝试设置每个按钮,而不是在事先设置XIB中的新按钮,而是允许您将每个元素与应用程序链接,并确保在调试之前看起来恰到好处。
只需进入“[Your-App-Name] viewController.xib”,然后将视图从对象库拖到左侧的窗格中。从这里添加每个元素并将它们放在视图所需的位置。现在在“[Your-App-Name] viewController.h”文件中,为每个需要更改的元素添加IBOutlets,并为每个按钮添加IBActions。还为新视图创建一个IBOutlet。
IBOutlet UIView* addDrinkView;
返回XIB文件,使用文件所有者将每个插座链接到每个元素,将每个方法链接到每个按钮。确保链接IBOutlet
现在,在您的“[Your-App-Name] viewController.m”文件中,您可以定义每个按钮方法,只需执行以下操作即可访问新视图并解除以下内容:
-(IBAction)openAddView
{
[self setView:addDrinkView];
}
-(IBAction)saveButtonPressed
{
[self setView:view];
//save code goes here
}
-(IBAction)cancelButtonPressed
{
[self setView:view];
//cancel code goes here
}
这比尝试将所有内容放在代码中要容易得多。
希望这有帮助!