0

好的,所以我在这里有一个有趣的情况:

我有一个日历视图,这个视图没有导航栏,所以我创建了另一个视图来包含日历,并在该视图中添加了一个导航栏。

所以现在我有 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,因为它使用了另一个实例,并且应该设置的属性没有设置。

4

2 回答 2

0

您似乎添加了一个不需要的视图控制器。错误是因为您从不显示该视图控制器,然后尝试从中显示另一个视图控制器。

输入代码SegueInsert并将其移至SeguqInsert. 然后删除CalendarMonthViewController(大概没有做任何其他事情并且没有其他代码)。

于 2013-07-26T16:41:30.100 回答
0

韦恩是对的。额外的视图控制器导致了问题。但是,我认为您不能只将代码移过来。您应该在导航控制器中保留指向日历的指针,并在 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

}

如果您担心保留指向日历的指针,您可以随时使用协议来获取信息。

于 2013-07-26T19:50:30.627 回答