我使用了一个集合视图来呈现一些数据 - 一切都很好但是我很难通过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'上找不到属性。
欢呼声
答案 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"属性。