2015-11-05 49 views
0

我看過一些git hub項目和SO問題,有些人用編程方式爲他們的項目使用了搜索欄。我也跟着這個項目project。他們創建了搜索欄對象並放置它。但最後他們增加了一種方法「觀察員」。真的我不明白,menthod.If我運行我的應用程序沒有這種方法。無法看到我的搜索欄searchbar/did select-deselect ios

其實有任何方法稱爲「觀察員」。我對ios很陌生,所以只有這個疑問。

另一個問題:

要delect和去選擇集合視圖細胞。我做了下面的代碼。但是當我選擇一個單元格時,它的背景顏色會發生變化,但是當我再次選擇同一個單元格時,它不會顯示給我的默認didde-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]; 

} 

這是方向選擇的集合觀察室/取消沒有選擇將work.Thanks!

編輯:

我用一些登錄註銷我的projets其中有一些收藏view.I使用搜索欄添加喜歡在上面git的樞紐工程我gave.When我按下注銷按鈕我的應用程序崩潰。

這是我的註銷代碼:

- (IBAction)logout:(id)sender { 
    [self dismissViewControllerAnimated:YES completion:nil]; 



} 

當我從我的項目中刪除addobserber方法及其工作well.But我需要顯示我的搜索bar.if我用我的應用程序崩潰時,我按註銷

但我我以前不使用此代碼:

-(void)dealloc{ 
    // remove Our KVO observer 
    [self removeObservers]; 
} 

它需要插入我的代碼運行良好

回答

0

對於你的第一個問題:

在您添加觀測到collection view

- (void)addObservers{ 
    [self.collectionView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; 
} 

所以,如果有關於collectionViewcontentOffset任何改變,它會調用下面的方法和項目更改搜索欄框架:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(UICollectionView *)object change:(NSDictionary *)change context:(void *)context{ 
if ([keyPath isEqualToString:@"contentOffset"] && object == self.collectionView) { 
    self.searchBar.frame = //..... 
    } 
} 

在您的項目中,此方法處理t他搜索欄框。所以,除非你真的沒有找到它的用處,否則不要刪除這個方法。如果你沒有找到你的搜索欄,你會錯過它。在這種情況下,您需要在代碼中的某處設置搜索欄框架。

對於您的第二個問題:

「要delect和去選擇集合觀察室我做了以下code.But當我選擇一個單元格它的背景顏色改變,但是當我選擇同樣的單元格,它不會顯示給我的默認didde-select方法。「

它不這樣工作。當您再次選擇該單元格時,將調用方法didSelectItemAtIndexPath,並且您沒有看到它的白色。

如果您選擇另一個單元格,單元格只會被deSelected。如果您想要手動選擇細胞,則需要致電deselectItemAtIndexPath。再一次,如果你在didSelectItemAtIndexPath上這樣做,你沒有發現太大的差異,因爲它在你選擇細胞後立即取消選擇!

+0

我使用'與登錄logot.But addObservers'當我按下退出按鈕我的應用程序越來越崩潰 – mark

+0

' - (IBAction爲)註銷:(ID)發送方{ [自dismissViewControllerAnimated:YES完成:無]; } – mark

+0

上面的代碼我用於註銷。如果我刪除觀察員其工作正常。但我需要這種方法。現在該怎麼做.. – mark