UICollectionView - 通过segue为选定的索引路径传递数组日期

时间:2014-05-11 19:54:32

标签: ios objective-c

我使用了一个集合视图来呈现一些数据 - 一切都很好但是我很难通过segue将数据传递给子视图 - 基本上我需要传递点击索引路径的数组数据 - 这个就是我在mo -

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if ([[segue identifier] isEqualToString:@"sightSeg"]) {
    NSArray *thisarr = [_sightsColView indexPathsForSelectedItems];


    SightViewController *destController = [segue destinationViewController];

    destController.viewTit = thisarr.siteTitle;


    }
}

我目前收到错误,指出在类型nsarray'上找不到属性。

欢呼声

3 个答案:

答案 0 :(得分:0)

您正在调用NSArray类型的对象的属性“siteTitle”,该对象不是由iOS本机提供的,因为它是您的自定义属性而不是本机NSArray属性。 假设您的数组包含数组中每个元素的字典,您可以执行以下操作:

// Implement the collection view delegate method
- (void)collectionView:(UICollectionView *)collectionView 
            didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    self.selectedItemIndex = indexPath.row; // define NSInteger selectedItemIndex property in your interface
}



// then in your prepareForSegue
...
..
.

NSDictionary* selectedItem = (NSDictionary*)[yourDatasource objectAtIndex:self.selectedItemIndex ];

SightViewController *destController = [segue destinationViewController];
destController.viewTit = [selectedItem objectForKey:@"siteTitle"];

// Otherwise if it is a simple nsarray contains strings only 
// ( so each element in the   array is directly the title of a different view ) you could simply:

NSString* selectedTitle = (NSString*)[yourDatasource objectAtIndex:self.selectedItemIndex ];

SightViewController *destController = [segue destinationViewController];
destController.viewTit = selectedTitle ;

希望有所帮助

答案 1 :(得分:0)

我猜你选择的集合单元格的数据源对象是否实现了siteTitle属性?但是,thisarr包含类NSIndexPath的对象,即只是一个"指针"在哪里找到您感兴趣的所选单元格的对象。使用索引路径从实际数据源中获取合适的对象。

答案 2 :(得分:0)

集合视图支持多种选择。因此,indexPathsForSelectedItems方法返回一个NSIndexPath对象数组,每个选定项对应一个。

正如Luca Iaco在帖子中建议的那样,您可以设置代码以响应didSelectRowAtIndexPath消息,并记录用户选择的项目行。

根据您尝试做的事情,您可能只想要单一选择。在这种情况下,您应该在集合视图上将allowsMultipleSelection标志设置为false。

您可以使用indexPathsForSelectedItems向集合视图询问当前选择,然后获取数组中的第一项:

NSArray *selectedItems = [self.collectionView indexPathsForSelectedItems;
NSIndexPath *selectedItem = selectedItems[0];
int selectedIndex = selectedItem.row;

MyClass *item = (MyClass *) thisarr[selectedIndex];
NSString title = item.siteTitle;

你要在哪里取代" MyClass"上面是thisArr数组中对象的类,并且有一个" siteTitle"属性。