我已经看到了一些git hub项目和SO问题,有些人以编程方式使用搜索栏为他们的项目。我也跟着这个项目project。他们创建了搜索栏对象并放置了它。但最后他们添加了一种方法"观察者"。真的我无法理解menthod。如果我没有那种方法运行我的应用程序。无法看到我的搜索栏
实际上有任何方法称为"观察者"。我是ios的新手,所以只有这个疑问。
另一个问题:
选择和取消选择集合视图单元格。我用下面的代码做了。但是当我选择一个单元格时它会改变背景颜色,但是当我再次选择相同的单元格时它不会显示到我的默认didde-select方法。如果我选择其他单元格,我的第一个选定单元格将变为白色根据did-de select方法的颜色
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.backgroundColor = [UIColor cyanColor];
}
//did-deselect
-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.backgroundColor = [UIColor whiteColor];
}
这是集合视图单元格select / did de select将工作的方式。谢谢!
编辑:
我为我的项目使用了一些登录注销,它有一些集合视图。我使用了上面的git hub项目添加的搜索栏。当我按下注销按钮我的应用程序崩溃。
这是我的退出代码:
- (IBAction)logout:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
当我从我的项目中删除addobserber
方法时,它运行良好。但我需要显示我的搜索栏。如果我按下注销时使用我的应用程序崩溃
但我没有使用此代码:
-(void)dealloc{
// remove Our KVO observer
[self removeObservers];
}
是否需要插入我的代码才能正常工作
答案 0 :(得分:0)
第一个问题:
在项目中,您要将观察者添加到collection view
- (void)addObservers{
[self.collectionView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
}
因此,如果对collectionView
contentOffset
进行任何更改,它将调用以下方法并更改搜索栏框架:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(UICollectionView *)object change:(NSDictionary *)change context:(void *)context{
if ([keyPath isEqualToString:@"contentOffset"] && object == self.collectionView ) {
self.searchBar.frame = //.....
}
}
在您的项目中,此方法处理搜索栏框架。所以,除非你真的没有找到任何使用它,否则不要删除该方法。如果你没找到你的搜索栏,你会错过它。在这种情况下,您需要在代码中的某处设置搜索栏框架。
第二个问题:
“选择和取消选择集合视图单元格。我使用下面的代码。但是当我选择一个单元格时,它会改变背景颜色,但是当我再次选择相同的单元格时它不会显示为我的默认值 - 选择方法。“
它不像那样工作。当您再次选择单元格时,方法didSelectItemAtIndexPath
将被调用,您不会看到它的白色。
如果选择另一个单元格,则仅取消选择单元格。如果要手动取消选择单元格,则需要调用deselectItemAtIndexPath
。同样,如果你在didSelectItemAtIndexPath
上执行此操作,则在选择单元格后立即取消选择immediatley时,您不会发现太多差异!!!!