- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个启用了节页脚的 UICollectionView
。我创建了一个 UICollectionReusableView
的自定义子类,名为 LeafletFooterView
并声明了一些 IBOutlet
和 IBAction
:
- (IBAction)dropboxButton:(id)sender;
- (IBAction)soundcloudButton:(id)sender;
在我的 UICollectionViewClass
中,我有:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
UICollectionReusableView *reusableview = nil;
if (kind == UICollectionElementKindSectionFooter) {
UICollectionReusableView *footerview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView" forIndexPath:indexPath];
reusableview = footerview;
}
return reusableview;
}
在 LeafletFooterView
类的 IBAction
中,我只是想呈现另一个 viewController
:
- (IBAction)dropboxButton:(id)sender
{
VideoWebViewController *video = [[VideoWebViewController alloc] init];
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:video];
[self presentViewController:navigation animated:YES completion:nil];
[video setSelectedVideo:@"https://www.dropbox.com/"];
}
错误是:
No visible @interface for 'LeafletFooterView' declares the selector 'presentViewController:animated:completion'.
我已经在 IBAction
方法中尝试了 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.dropbox.com"]];
,虽然现在有没有错误,点击它不会打开带有该网站的 Safari。该方法肯定会被调用; NSLog
和 Breakpoint
证明了这一点。
更新
所以在这不起作用之后,我尝试完成为此声明委托(delegate)的过程,与这个问题的方式大致相同:Present view controller from NSObject subclass .
这是我的 LeafletFooterView
:
@class LeafletFooterView;
@protocol FooterViewDelegate <NSObject>
-(void)rowTapped;
@end
@interface LeafletFooterView : UICollectionReusableView
@property (weak, nonatomic) IBOutlet UILabel *label;
- (IBAction)dropboxButton:(id)sender;
@property(nonatomic,assign)id<FooterViewDelegate> delegate;
The LeafletFooterView.m is here: - (IBAction)dropboxButton:(id)sender
{
NSLog(@"Dropbox");
[self.delegate rowTapped];
}
现在在我的 LeafletCollectionViewController
中,我有:
- (void)rowTapped
{
NSLog(@"Is this getting called?");
VideoWebViewController *video = [[VideoWebViewController alloc] init];
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:video];
[self presentViewController:navigation animated:YES completion:nil];
[video setSelectedVideo:@"https://www.dropbox.com/"];
}
当我运行这段代码时,这个方法实际上从未被调用过。 LeafletCollectionView
设置为使用 FooterViewDelegate
。在 LeafletCollectionView
的 viewWillAppear
中,我尝试了以下操作:
LeafletFooterView *footer = [[LeafletFooterView alloc] init];
footer.delegate = self;
rowTapped
方法实际上从未被调用过。
用户应该能够点击 LeafletFooterView
中的 UIButton
并显示 UIViewController
。我该如何实现这一目标?任何指导将不胜感激。
最佳答案
您需要在 dataSource
所在的位置显示 UINavigationController
。因此,如果您尝试删除 IBAction
,而是以编程方式将方法添加到数据源要显示 VideoWebViewController
的位置。
然后在您的 viewForSupplementaryElementOfKind
方法中,您将访问按钮并触发该方法。所以我突然想到了(有一段时间没有使用 objC):
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
UICollectionReusableView *reusableview = nil;
if (kind == UICollectionElementKindSectionFooter) {
LeafletFooterView *footerview = (LeafletFooterView *)[collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView" forIndexPath:indexPath];
[footerView.dropboxButton addTarget:self
action:@selector(dropboxTapped:)
forControlEvents:UIControlEventTouchUpInside];
reusableview = footerview;
}
return reusableview;
}
-(void)dropboxTapped:(id)sender{
// Present the controller here
}
希望对您有所帮助:)
编辑:更新您的问题后,我发现您走了一条不同的路线。您只需要为 footerView 设置委托(delegate),如下所示:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
UICollectionReusableView *reusableview = nil;
if (kind == UICollectionElementKindSectionFooter) {
LeafletFooterView *footerview = (LeafletFooterView *)[collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView" forIndexPath:indexPath];
[footerView.dropboxButton addTarget:self
action:@selector(dropboxTapped:)
forControlEvents:UIControlEventTouchUpInside];
footerView.delegate = self
reusableview = footerview;
}
return reusableview;
}
此外,不要忘记像我在代码中使用 (LeafletFooterView *)
那样将 View 转换为 LeafletFooterView
我希望它能工作:)
关于ios - 协议(protocol)和委托(delegate)不适用于 UICollectionReusableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826597/
我一直在尝试在 Non-Storyboard iPad 项目中子类化 UICollectionReusableView。我在 IB 中构建了一个 View 并将其连接到我的自定义类,在我的 Colle
我正在使用自定义 UICollectionViewFlowLayout,并且我已经为此布局注册了自定义可重用类... [self registerClass:[noContentDecoration
我在 UICollectionReusableView 方面遇到了一个非常奇怪的问题。我的页脚显示正确,但问题出在我的页眉上。 我的标题是 UICollectionReusableView 的子类并包
我已经添加了 到我的收藏 View 并设置我的 UICollectionView如下所示。 [self.collectionView registerClass:[UICollectionViewCe
我有两个不同的 View 需要在 UICollectionView 中实现。我的问题是如何使用 Storyboard将两个 UICollectionReusableView 添加到 UICollect
如何更新 UICollectionView 部分标题?我的 Collection View 中部分的标题(标题)显示每个部分可用的项目总数,当用户从集合中删除项目时,我需要更新该标题。 我正在实现数据
我在开发 iOS 应用程序时遇到了一些关于使用 UICollectionView 单元格的问题。 这次想问一下如何显示UICollectionView(UICollectionReusableView
我有带标题的 collectionView,页眉的第一个大小是 X,我想将其更改为 x+50 但带有动画。但是当我更改标题框架时,它只是越过视单元。 HeaderCollectionView
当我为我的 headerView 设置背景颜色时,滚动指示器在它后面,看起来非常奇怪。我创建了一个示例项目 here但它基本上是一个带有 collectionView 的简单项目,它为带有背景的标题注
如标题所述,我在 UICollectionReusableView 中有一个标签。我使用的 View 使用以下命令成功出队: func collectionView(collectionView: U
我在考虑 UICollectionView 的 header 时遇到了一个奇怪的问题。 我基本上使用了以下代码: http://www.raywenderlich.com/78551/beginnin
UICollectionView header 部分。 class HeaderView: UICollectionReusableView { @IBOutlet weak var lbl_
我正在尝试将一些 UIButton 添加到 collectionviews header ,但很难发现按下了哪个 header 。有什么建议吗? 最佳答案 如果您以编程方式添加 UIButtons,最
我有一个 UICollectionReusableView 用于 UICollectionView 标题部分,代码如下: var headingLabel: UILabel! o
我有一个自定义 UICollectionReusableView,里面只有一个标签:标签的前导、尾随、顶部和底部约束设置为 8。 在 Controller 上,我注册了单元格,然后: func col
我想制作 Collection View 标题,但它不起作用。 Storyboard 在设备上 我下面的代码不工作,print("ssssss") 不显示。 override func collect
我在将进行同步 JSOn 调用的旧代码更新为使用 AFNetworking 进行异步调用的新代码时遇到了问题。 在我的旧代码中,我使用日期字符串(“release_date”)将单元格与 UIColl
我为 UICollecton View 部分标题创建了一个 UICollectionReusuable View 。我使用以下代码实现 header View 。 - (UICollectionReu
我有一个自定义的 UICollectionReusableView、HeaderCollectionReusableView,我正在我的代码中使用它。它又包含一个 UILabel。当我去使用标签时,由
我希望我在 UICollectionView 中的部分有一个带有图像的标题。 我遵循了这些步骤: 在 Storyboard 中,为我的 UICollectionView 分配一个标题作为附件 给它一个
我是一名优秀的程序员,十分优秀!