Ios 使用popover在prepareForSegue中设置属性
我有一个ViewController,上面有两个在Interface Builder中创建的按钮。第一个按钮将显示一个在IB中链接的popover,它链接到一个UINavigationController,下面有一个TableView,其类为Ios 使用popover在prepareForSegue中设置属性,ios,objective-c,Ios,Objective C,我有一个ViewController,上面有两个在Interface Builder中创建的按钮。第一个按钮将显示一个在IB中链接的popover,它链接到一个UINavigationController,下面有一个TableView,其类为PopupViewController 第二个按钮,我为goToCategory设置了一个操作设置,单击该按钮时,我想在PopupViewController ViewController.m //go to category -(IBAction)goTo
PopupViewController
第二个按钮,我为goToCategory
设置了一个操作设置,单击该按钮时,我想在PopupViewController
ViewController.m
//go to category
-(IBAction)goToCategory:(id)sender{
NSLog(@"GO TO CAT");
//PopupViewController *popupVC = [self.storyboard instantiateViewControllerWithIdentifier:@"popoverVC"];
//popupVC.currentLevel = 1;
[self performSegueWithIdentifier:@"popoverSegue" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
NSLog(@"seg1");
if ([[segue identifier] isEqualToString:@"popoverSegue"]){
//PopupViewController *popupVC = (PopupViewController *)[[segue destinationViewController] visibleViewController];
//PopupViewController *popupVC = [segue destinationViewController];
PopupViewController *popupVC=[[[segue destinationViewController]viewControllers]objectAtIndex:0];
popupVC.test = @"just a test";
NSLog(@"seg2");
}
}
PopupViewController.h
@property (nonatomic, strong) NSString *test;
PopupViewController.m
@synthesize test;
-(void)viewDidLoad{
NSLog(@"test: %@", test); //returns test: (null)
}
我在这方面找到了很多答案,因此在我的PrepareForegue中有一些被注释掉的行。但是这些都没有设置test
的值<代码>PopupViewController*popupVC=[segue destinationViewController]代码>抛出一个错误,因为它引用了UINavigationController,所以我不能按原样使用它,尽管在我看到的许多答案中,这似乎是实现它的方法。但不管我用哪种方式做,输出总是空的
更新:
PopupViewController*popupVC=(PopupViewController*)[[segue destinationViewController]visibleViewController]代码>和PopupViewController*popupVC=[[[segue destinationViewController]ViewController]对象索引:0]上面我的prepareforsgue
中的code>都在6.1模拟器上工作。我的iPad的iOS版本是5.1.1,但它没有使用。对于iOS 5,我需要做些不同的事情吗?试试这个
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"seg1");
if ([[segue identifier] isEqualToString:@"popoverSegue"])
{
UINavigationController *navController = (UINavigationController*)[segue destinationViewController];
PopupViewController *popupVC = [navController topViewController];
popupVC.test = @"just a test";
NSLog(@"seg2");
}
}
我确实尝试过按照您刚才的方式编写它,但正如我所提到的,它抛出了一个错误,即[UINavigationController setTest:]:无法识别的选择器发送到实例
,因为目标视图控制器是一个UINavigationController,而不是PopupViewcontroller刚刚尝试了新更新的代码,但仍然没有成功:(已尝试将行更改为PopupViewController*popupVC=(PopupViewController*)[navController-topViewController]
以及xcode给了我一个警告,“初始化PopupViewController的指针类型不兼容,表达式类型为UIViewController”\uu\strong“您有两个导航控制器吗?PopupViewController是否设置为导航控制器的根viewcontroller?对于popover,我有一个导航控制器,是的PopupVC是set作为导航控制器的根视图控制器。有趣的是,当我正要更新我的答案时,PopupViewController*popupVC=(PopupViewController*)[[segue destinationViewController]visibleViewController];
和PopupViewController*popupVC=[[segue destinationViewController]ViewController]objectAtIndex:0]
从我最初的问题来看,两者似乎都在6.1模拟器上工作。我的iPad的iOS是5.1.1,但它没有工作。iOS 5有什么不同的地方需要我做吗?嗯,如果你想访问你的Popover,这应该可以:[(UIStoryboardPopoverSegue*)segue popoverController]