好的,我在这里有一个有趣的情况:
我有一个日历视图,此视图没有导航栏,因此我创建了另一个视图以包含日历并为该视图添加了导航栏。
所以现在我有2个视图显示导航栏和日历。
导航栏有一个应该显示“插入”控制器的按钮,但在此之前,它必须将日历中的@property设置为“插入”视图控制器。
总结一下:
外部视图控制器IBAction - > “插入”上的内部日历设置属性 - >内部日历呈现“插入”。
以下是代码:
ViewControllerCalendarContainer.h
#import <UIKit/UIKit.h>
@interface ViewControllerCalendarContainer : UIViewController
- (IBAction)SeguqInsert:(id)sender;
@end
ViewControllerCalendarContainer.m
#import "ViewControllerCalendarContainer.h"
#import "CalendarMonthViewController.h"
...
- (IBAction)SeguqInsert:(id)sender {
CalendarMonthViewController *controller = [[CalendarMonthViewController alloc] initWithNibName:nil bundle:nil];
[controller SegueInsert];
}
CalendarMonthViewController.h
@property (nonatomic, strong) NSDate *dateSelected; // data to send to Insert View Controller
- (void)SegueInsert; // the present "Insert View Controller Method"
CalendarMonthViewController.m
#import "CalendarMonthViewController.h"
#import "ViewControllerInsert.h"
- (void)SegueInsert {
NSDate *dateUserSelected = self.dateSelected;
ViewControllerInsert *controller = [[ViewControllerInsert alloc] initWithNibName:@"ViewControllerInsert" bundle:nil];
controller.dateSelected = dateUserSelected; // set property in Insert
[self presentViewController:controller animated:YES completion:nil]; // present
}
点击运行时错误:
其视图不在窗口层次结构中!
PS:我不能通过Storyboard进行Segue,因为它使用了另一个实例,并且应该设置的属性没有设置。
答案 0 :(得分:0)
您似乎添加了一个您不需要的视图控制器。该错误是因为您从未显示该视图控制器,然后尝试从中显示另一个视图控制器。
获取SegueInsert
中的代码并将其移至SeguqInsert
。然后删除CalendarMonthViewController
(可能没有做任何其他事情而且没有其他代码)。
答案 1 :(得分:0)
Wain是对的。额外的视图控制器导致问题。但是,我认为您不能仅仅移动代码。您应该在导航控制器中保留指向日历的指针,并在SequqInsert中设置属性。像这样:
#import <UIKit/UIKit.h>
@interface ViewControllerCalendarContainer : UIViewController
@property (weak, nonatomic) CalendarMonthViewController *calendarViewController;
- (IBAction)SeguqInsert:(id)sender;
@end
#import "ViewControllerCalendarContainer.h"
#import "CalendarMonthViewController.h"
...
- (IBAction)SeguqInsert:(id)sender {
NSDate *dateUserSelected = self.dateSelected;
ViewControllerInsert *controller = [[ViewControllerInsert alloc] initWithNibName:@"ViewControllerInsert" bundle:nil];
controller.dateSelected = calendarViewController.dateUserSelected; // set property in Insert
[self presentViewController:controller animated:YES completion:nil]; // present
}
如果您担心保留指向日历的指针,您可以随时使用协议来获取信息。