我已经创建了一个自定义UICollectionViewCell,里面有几个按钮和标签。我需要每个按钮通过popover显示不同的视图。我尝试在按钮上放置segues,这给了我编译器错误。
".../MainStoryboard_iPad.storyboard: Couldn't compile connection: <IBCocoaTouchOutletConnection:0x4012ea380 <IBProxyObject: 0x4012d7600> => anchorView => <IBUICollectionViewCell: 0x4012d06a0>>"
我尝试将segue放在原型单元本身上,结果相同。我从按钮和标签中删除了所有IBOutlet,仍然会出现编译错误。
如何正确设置集合视图单元格到出口和segues?我已经看过这样做的教程,但它根本就没有用。
TIA!
Janene
答案 0 :(得分:1)
这对我有用。我希望每个集合视图单元格都有一个按钮,可以弹出一个弹出窗口。
首先,在Interface Builder中,我在故事板中创建了一个新的视图控制器 - 当用户触摸按钮时,此视图控制器是目标弹出窗口。在IB中,确保在Identity Inspector中为此视图控制器提供一个Storyboard ID,我使用了“destinationView”。在Attributes Inspector中,我将Size设置为“Form Sheet”并将Presentation设置为“Form Sheet”。
我将按钮放到源视图控制器上的集合视图中的集合视图单元格中。
在我的源视图控制器中,我创建了一个处理按钮的方法:
- (IBAction)handleButton:(id)sender
然后我将该按钮动作连接到Interface Builder中的源视图控制器中的该方法。
此功能的代码如下所示:
- (IBAction)handleButton:(id)sender
{
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
// get an instance of the destination view controller
// you can set any info that needs to be passed here
// just use the "sender" variable to find out what view/button was touched
DestinationViewController *destVC = [storyboard instantiateViewControllerWithIdentifier:@"destinationView"];
// create a navigation controller (so we can have buttons and a title on the title bar of the popover)
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:destVC];
// say that we want to present it modally
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
// show the popover
[[self navigationController] presentViewController:navController animated:YES completion:^{
}];
}
在我的目标视图控制器中,我添加了一个标题和一个用于解除弹出框的完成按钮:
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissExampleButton:)];
self.title = @"Example Title";
}
- (IBAction)dismissExampleButton:(id)sender
{
[[self parentViewController] dismissViewControllerAnimated:YES completion:^{
}];
}
请注意,我尝试使用segues。但是,弹出窗口对我来说不起作用,它只是动画到一个新的全尺寸目标视图控制器,即使IB中的设置是“表单”。我如上所述在IB中设置了目标视图控制器,并从源视图控制器创建了一个segue到目标视图控制器。我在属性检查器中给segue一个标识符,就像“exampleSegue”一样。我将我的按钮连接到源视图控制器中的操作。
通过这种方式,源视图控制器看起来像:
- (IBAction)handleButton:(id)sender
{
[self performSegueWithIdentifier:@"exampleSegue" sender:sender];
}
并且,为了将数据传送到目标视图控制器,我还在源视图控制器中实现了它:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"exampleSegue"]) {
DestinationViewController *destViewController = (DestinationViewController *)[segue destinationViewController];
// give the destViewController additional info here
// destViewController.title.text = @"blah";
// etc.
}
}