2014-06-20 111 views
0

我有一個從故事板連接的按鈕,我想滾動我的水平滾動集合查看一個項目時,按下。這裏是我想出了代碼:創建一個按鈕滾動UICollectionView

- (IBAction)rightButton:(id)sender { 
    NSIndexPath *indexPath = [self.collectionView indexPathsForSelectedItems]; 
    NSIndexPath* newIndexPath = [NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section]; 


    [self.collectionView scrollToItemAtIndexPath:newIndexPath 
          atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally 
            animated:YES]; 

}

但是,這是建立一個崩潰,並顯示錯誤

-[__NSArrayI row]: unrecognized selector sent to instance 0x178232540 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI row]: unrecognized selector sent to instance 0x178232540' 

我懷疑的問題是,這個代碼是更多一個TableView,它不喜歡那裏的公園。

有人可以幫我解決這個問題,並找出爲什麼我得到一個錯誤?有一個更好的方法嗎?

由於

回答

1

indexPathsForSelectedItems方法名中有一個額外的sPathsPath,這表明它返回的索引路徑,而不是一個單一的指數路徑的NSArray。因此,解決辦法就是這行

NSIndexPath *indexPath = [self.collectionView indexPathsForSelectedItems]; 
NSIndexPath* newIndexPath = [NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section]; 

改變這種

NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 

NSArray *indexPaths = [self.collectionView indexPathsForSelectedItems]; 
if (indexPaths.count > 0) 
{ 
    NSIndexPath *oldIndexPath = indexPaths[0]; 
    NSInteger oldRow = oldIndexPath.row; 
    newIndexPath = [NSIndexPath indexPathForRow:oldRow + 1 inSection:oldIndexPath.section]; 
} 
+0

嘿,讓我改變了我的代碼到和它不喜歡的另外有。我得到錯誤'指向接口的指針「id」,這是不是這個架構和平臺的常量大小的錯誤' –

+1

@Deannakov - 是的,它不喜歡這樣的事實,即數組中的對象是' id'。將對象分配(並隱式轉換)爲「NSIndexPath *」有助於編譯器的快樂。我已經更新瞭解釋的答案。 – user3386109

+0

好的 - 這是行得通的,滾動選中項目的右側的一個項目。問題在於它不是*選擇所選項目右側的項目,但這是對我的影響:我的代碼只是在滾動它。謝謝您的幫助!如果你對選擇的改變有深入的瞭解,但我會做一些調查。 –